gpt4 book ai didi

MYSQL InnoDB 引擎索引(B-Tree),和一对一关系

转载 作者:搜寻专家 更新时间:2023-10-30 20:36:03 24 4
gpt4 key购买 nike

简单地说,我知道索引最好用在 where 子句中经常使用的列上,以及任何类型的排序中,例如“order by”,以及具有高基数的列。另一方面,如果过度使用,索引会减慢写入操作的速度并占用大量磁盘空间。

我有一个包含以下字段的用户注册表:

          ID INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
User_name VARCHAR(35) NOT NULL,
BirthDay DATE NOT NULL,
password CHAR(70) NOT NULL,
Security_hint VARCHAR(27) NOT NULL,
Email VARCHAR(225) NOT NULL,
userType ENUM ('a','b','c','d') NOT NULL DEFAULT 'a',
Signup_Date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
activation TINYINT(1) UNSIGNED NOT NULL,
Ip BINARY(16) NOT NULL,
PRIMARY KEY (ID),
UNIQUE KEY User_name (User_name,Email)
  1. 我非常相信我为所有字段选择的数据类型。
  2. Signup_DateSecurity_hint 字段很少会被查询,所以我决定将它们隔离在一个单独的表中,并使用外键使用 1-1 关系。这个策略有效吗?该策略是否会影响性能?
  3. 重要一:我是否还必须为 PASSWORD 字段编制索引才能使登录过程非常快?

非常感谢你们。

编辑:我的登录查询是SELECT columns FROM users WHERE username = "x"AND password = "stuff"。我在电子邮件上使用索引只是为了快速检查现有电子邮件,因为每个用户的电子邮件和用户名必须是唯一的

最佳答案

the fields Signup_Date and Security_hint will rarely be queried against, so I decided to isolate them in a separate table and use 1-1 relationship using foreign keys. is this strategy efficient? is there any performance hit that might be resulted from this strategy?

我认为以这种方式处理它没有任何值(value)。如果它不会以关键方式影响表的大小,那么您只是增加了对不必要连接的需求。

IMPORTANT ONE: Do I have to index the PASSWORD field as well so as to make the log in process very fast??

取决于您的登录。

如果你使用类似的东西:

SELECT columns FROM users WHERE username = "x" AND email ="y" AND password = "stuff"

你会没事的,因为 username + emailindexunique-constraint 负责通过 index 使用情况查找用户。

如果您只是在登录时检查用户名和密码,则(用户名、密码)索引可能有意义如果您认为会有很多具有相同用户名的用户。否则它将使用用户名的索引并且通常也很快。

关于MYSQL InnoDB 引擎索引(B-Tree),和一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39139792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com