建立索引规则
-
索引不宜过多:每张表的索引数量应根据实际业务需求控制,一般建议不超过5 - 6个。过多索引会增加数据插入、更新和删除的开销,因为每次数据变更时,相关的索引都需要更新。
-
复合索引遵循最左前缀原则:创建复合索引(如 CREATE INDEX idx_name ON table (col1, col2, col3);)时,查询条件必须从最左边的字段开始使用,索引才会生效。例如查询 WHERE col1 = 'value1' AND col2 = 'value2'; 会使用该复合索引,但 WHERE col2 = 'value2'; 不会使用。
-
索引字段选择窄数据类型:尽量选择数据类型占用空间小的字段建立索引,如 INT 比 BIGINT 占用空间小,在查询时IO开销更小,索引效率更高。
-
避免在频繁更新的字段上建立索引:频繁更新的字段会导致索引频繁调整,降低数据库性能。例如一个记录操作时间的字段,每次数据更新都要修改,不适合建立索引(除非查询时经常用到该字段作为过滤条件)。
选择建索引字段依据
-
经常用于查询条件的字段:如 WHERE 子句中的过滤字段,像 SELECT * FROM table WHERE user_id = 1; 中的 user_id 字段,建立索引可以加快查询速度。
-
经常用于排序(ORDER BY)和分组(GROUP BY)的字段:在这些字段上建立索引,MySQL可以利用索引的有序性直接进行排序和分组操作,提高效率。例如 SELECT * FROM table ORDER BY create_time; 中的 create_time 字段。
-
表连接字段:在多表 JOIN 操作中,连接条件涉及的字段建立索引,可以加快表连接的速度。比如 SELECT * FROM table1 JOIN table2 ON table1.id = table2.table1_id; 中的 table1.id 和 table2.table1_id 字段。
-
索引选择性高的字段:选择性是指索引列中不同值的数量与表中记录总数的比值。比值越高,索引的效率越高。例如一个主键字段,其选择性为1,非常适合建立索引;而一个性别字段,选择性较低,建立索引效果可能不佳。