-
非唯一索引按照“i_字段名称_字段名称[_字段名]”进行命名。
-
唯一索引按照“u_字段名称_字段名称[_字段名]”进行命名。
-
索引名称使用小写。
-
索引中的字段数不超过5个。
-
唯一键由3个以下字段组成,并且字段都是整形时,使用唯一键作为主键。
-
没有唯一键或者唯一键不符合5中的条件时,使用自增(或者通过发号器获取)id作为主键。
-
唯一键不和主键重复。
-
索引字段的顺序需要考虑字段值去重之后的个数,个数多的放在前面。
-
ORDER BY,GROUP BY,DISTINCT的字段需要添加在索引的后面。
-
单张表的索引数量控制在5个以内,若单张表多个字段在查询需求上都要单独用到索引,需要经过DBA评估。查询性能问题无法解决的,应从产品设计上进行重构。
-
使用EXPLAIN判断SQL语句是否合理使用索引,尽量避免extra列出现:Using File Sort,Using Temporary。
-
UPDATE、DELETE语句需要根据WHERE条件添加索引。
-
对长度大于50的VARCHAR字段建立索引时,按需求恰当的使用前缀索引,或使用其他方法。
-
下面的表增加一列url_crc32,然后对url_crc32建立索引,减少索引字段的长度,提高效率。
CREATE TABLE all_url(ID INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, url VARCHAR(255) NOT NULL DEFAULT 0, url_crc32 INT UNSIGNED NOT NULL DEFAULT 0, index idx_url(url_crc32));
-
合理创建联合索引(避免冗余),(a,b,c) 相当于 (a) 、(a,b) 、(a,b,c)。
-
合理利用覆盖索引。