索引优化
索引建立规范
前缀索引优化
覆盖索引、索引下推优化
建立联合索引,避免回表操作。不需要查询出包含整行记录的所有信息,也就减少了大量的 I/O 操作。
主键索引设置自增
索引设置为NOT NULL
防止索引失效
索引失效的情况有以下:
- 当我们使用左或者左右模糊匹配的时候,也就是 like %xx 或者 like %xx%这两种方式都会造成索引失效;
- 当我们在查询条件中对索引列做了计算、函数、类型转换操作,都会造成索引失效;(MySQL 在遇到字符串和数字比较的时候,会自动把索引列字符串格式转为数字,造成索引失效。字符串转换为数值类型时,非数字开头的字符串会转化为0,以数字开头的字符串会截取从第一个字符到第一个非数字内容为止的值为转化结果。)
- 联合索引要能正确使用需要遵循最左匹配原则,也就是按照最左优先的方式进行索引的匹配,否则就会导致索引失效。
- 在 WHERE 子句中,如果在 OR 前的条件列是索引列,而在 OR 后的条件列不是索引列,那么索引会失效。
- IN的取值范围较大时(大于总数据的30%)会导致索引失效,走全表扫描(NOT IN 和 IN 的失效场景相同);
删除长期未使用的索引
- 查询未使用过的索引
SELECT * FROM sys.schema_unused_indexes;
- 删除索引:DROP INDEX 索引名 ON 表名;