我有以下user registration table
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 and userType,因为这些信息必须显示在用户访问的任何页面中。
User_vars是一个用户可能每天(甚至每周)更新的字段;我认为索引这个字段可能不是一个好主意,因为索引减慢了写操作;如果错误,请纠正我。我在其他表中有许多像这样的其他字段(用户每天更新的字段,他们的更新必须显示在他们访问的任何页面上),不知道他们是否也必须被索引
注意:我知道我可以查询它们一次,然后缓存它们,但是我担心对表的第一次查询返回结果集会很慢。
非常感谢
发布于 2016-08-26 17:56:53
为了提高性能,将VARCHAR更改为TINYTEXT,这允许行具有固定的大小,从而加速表扫描。根据该表,查询可能是针对User_name和电子邮件的。将其更改为CHAR并对其进行索引。
https://stackoverflow.com/questions/39163218
复制相似问题