我有以下用户注册表
:
ID INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
User_name VARCHAR(35) NOT NULL,
Full_name VARCHAR(55) NOT NULL,
User_vars VARCHAR(255) 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)
我真的很困惑我是否应该索引字段 BirthDay、Signup_Date、Full_name、User_vars 和 userType
,因为这些信息必须显示在用户访问的任何页面中。
User_vars
是用户可能每天(甚至每周)更新的字段;我认为索引这个字段可能不是一个好主意,因为索引会减慢写入操作;如果错了请纠正我。我在其他表中有许多其他类似的字段(用户每天更新的字段,他们的更新必须显示在他们访问的任何页面中),并且不知道是否也必须对它们进行索引
注意:我知道我可以查询一次然后缓存它们,但是我担心对表的第一次查询返回结果集会很慢。
非常感谢
最佳答案
为了提高性能,将 VARCHAR 更改为 TINYTEXT,这允许行具有固定大小,从而加快表扫描。根据该表,查询可能针对用户名和电子邮件。将它们更改为 CHAR 并为它们编制索引。
关于MYSQL InnoDB 引擎索引(B-Tree),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39163218/