[英]MYSQL InnoDB engine indexing (B-Tree)
我有以下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
是用户可能每天(甚至每周)更新的字段; 我认为索引这个字段可能不是一个好主意,因为索引会减慢写操作的速度。 如果有错请纠正我。 我在其他表格中还有许多其他字段(用户每天更新的字段,并且他们的更新都显示在他们访问的任何页面上的字段),并且不知道是否也需要对其进行索引
注意:我知道可以查询一次然后将其缓存,但是,恐怕对表的第一个查询返回结果集的速度会很慢。
非常感谢
为了提高性能,请将VARCHAR更改为TINYTEXT,这允许行具有固定的大小,从而加快了表扫描的速度。 根据该表,可能会查询User_name和Email。 将其更改为CHAR并为其编制索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.