2026/10/4 5:07:12
网站建设
项目流程
- 不要盲目给所有字段创建索引,索引虽然可以提高查询效率,但会增加存储空间,并增加
INSERT、UPDATE、DELETE时维护索引的成本,应根据实际查询场景选择需要建立索引的字段。 - 优先给经常用于查询条件的字段建立索引,例如
WHERE、JOIN、ORDER BY、GROUP BY中经常使用的字段。 - 注意字段的区分度,字段区分度越高,索引筛选数据的能力通常越强,查询时需要进一步处理的数据越少,因此索引的收益通常越大。
- 合理设计联合索引,如果多个字段经常组合在一起作为查询条件,可以考虑建立联合索引,让一棵 B+Tree 同时按照多个字段进行组织和定位,从而更好地匹配这类查询。
- 注意联合索引中字段的顺序,需要遵循最左前缀原则,根据实际查询场景合理安排字段顺序。
- 注意索引字段的长度,索引字段越长,索引本身占用的空间通常越大,也会增加索引维护和访问的成本。对于较长的字符串字段,如果完整字段不需要参与索引,可以根据数据特点使用前缀索引,只对字段前 N 个字符建立索引,从而减少索引大小。
- 避免对索引字段进行函数或计算操作,普通索引是按照原字段值建立的有序结构,如果在查询条件中对索引字段进行函数或计算,查询条件可能无法直接利用这个有序结构进行定位,因此可能导致索引无法充分利用。
- 避免索引字段发生隐式类型转换,索引字段是什么类型,查询条件就尽量使用什么类型,避免 MySQL 在比较时对索引字段进行隐式类型转换,从而影响索引的使用。
- 注意
LIKE查询的写法,B+Tree 索引是有序的,LIKE 'abc%'确定了字符串的开头,因此可以利用索引的有序性快速定位范围;而LIKE '%abc%'开头不确定,无法根据 B+Tree 的顺序确定搜索范围,所以普通 B+Tree 索引通常无法有效利用。 - 主键索引需要合理设计,InnoDB 中主键是聚簇索引,主键不仅决定数据在聚簇索引中的组织方式,而且主键值还会被二级索引引用,因此主键应该尽量短、稳定,并避免频繁修改,以减少索引空间和维护成本。
- 创建索引后要使用
EXPLAIN进行分析,确认 MySQL 是否真正使用了索引,以及索引是否达到了预期效果。