mysql索引实战设计规范

1、【建议】命名规范:普通索引idx_colname;唯一索引uniq_colname_colname;如索引名过长可适当使用缩写,索引名称使用小写。

示例:
如在account_id,channel_id,type,create_date上建立联合索引,列比较多可适当缩写为idx_account_channel_type_date

2、【建议】复合索引尽量不要超过3个字段;合理创建符合索引,避免冗余,符合最左前缀规则。

说明:
1)最左匹配原则:在多列索引中,mysql会一直向右匹配直到遇到范围查询(>,<,between,like)就停止匹配。
2)将匹配度高、使用率高的列放在多列索引的前列。
3)索引(a,b,c)相当于(a)、(a,b)、(a,b,c)

3、【建议】选择唯一性字段或者基数大的字段创建索引。

说明:选择度高的列上创建索引,可以过滤更多的数据,效率更高。

4、【建议】为经常需要排序、分组、排重和联合操作的字段建立索引。

说明:如果可以使用到索引列进行排序、分组、排重可以避免filesort改为顺序扫描,提高效率。

5、【建议】为常作为select/update/delete where条件的字段建立索引。

6、【建议】限制索引的数目;通常不超过5个。

说明:过多的索引会影响dml的性能。

7、【建议】数据量特别大的字段(text、varchar(2000)等)可以通过创建额外的md5()字段创建索引进行等值匹配;或者将该字段拆分出去使用其他搜索引擎模糊查询。

8、【建议】对于无法创建索引的长字段,可以建立前缀索引。

说明:在保证选择度的基础上,选择合适的前缀大小可以减小索引存储,节省空间。

9、【建议】在多表join的SQL里,保证被驱动表的连接列上有索引,这样join执行效率最高。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.fengpt.cn/archives/mysql索引实战设计规范