# 数据库索引优化策略参考
基本原则
用于联接的列(外键/表关联字段)上建立索引 注:devtools中会以蓝色标注出表关联字段。
在常用作过滤器的字段上建立索引
不要在选择性非常差的字段上建索引 索引的选择性 = 不重复的索引值/数据表的记录总数 的比值。 索引的选择性越高则查询效率越高,因为选择性高的索引可以让数据库在查找时缩小搜索范围。 唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。
在SQL中常进行GROUP BY、ORDER BY的字段上建立索引
索引列尽量避免NULL值
尽可能把字段定义为NOT NULL,可以放置一个默认值,如’’,0等。
NULL列会使索引统计和值更加复杂,需要更多的存储空间和特殊处理。
不要在索引列上进行运算或使用函数 错误示例:
-- 函数运算,无法使用索引 select * from article where year(publish_time) < 2021
查询SQL避免隐式类型转换 错误示例 (id为varchar类型):
-- 无法使用索引的隐式类型转换 select * from article where id = 100
前导模糊查询不会使用索引
-- 全表扫描 select * from article where author like '%李'
联合索引最左前缀原则
负向条件索引不会使用索引,建议用in 负向条件有:!=、<>、not in、not exists、not like 等
-- 全表扫描 select * from article where id != 1 and id != 2