MySQL–优化(索引–索引创建原则)
- 定位慢查询
- SQL执行计划
- 索引
- 存储引擎
- 索引底层数据结构
- 聚簇和非聚簇索引
- 索引创建原则
- 索引失效场景
- SQL优化经验
一、索引创建原则
我们使用的索引种类:
- 主键索引
- 唯一索引
- 根据业务创建的索引(复合索引)
二、索引创建原则有哪些?
想象一个图书馆,里面的书籍没有按照任何顺序排列。如果你想找一本书,你可能需要一本一本地查看,这会非常耗时。这就是没有索引的数据库的感觉。
现在,想象图书馆员决定按照书的标题或作者来排序书籍。突然之间,找书变得容易多了。这就是索引的力量。
1、针对于数据量较大,且查询比较频繁的表建立索引
- 一般情况下单表超过10万数据(就去可以添加索引)
- 比喻:在一个繁忙的火车站,如果没有指示牌或电子显示屏告诉乘客哪趟列车在哪个站台,乘客就会四处寻找,造成混乱。索引就像这些指示牌,帮助数据库快速定位到需要的数据。
2、针对于常作为查询条件(where)、排序 (order by) 、分组(group by)操作的字段建立索引。
- 例子:如果你经常按照员工的入职日期来查询或排序数据,那么在这个字段上建立索引会很有用。
3、尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。
- 比喻:想象一个只有男性和女性两种选择的性别字段。虽然你可以在这个字段上建立索引,但由于区分度太低(只有两种可能),索引的效果可能并不明显。相比之下,身份证号或邮箱地址这样的字段区分度就很高,更适合建立索引。
4、字符串类型的字段,可以建立前缀索引
- 例子:对于像URL这样很长的字符串字段,你可能不需要对整个字段建立索引。只对URL的前几个字符建立索引(即前缀索引)可能就足够了。
5、尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。
6、控制索引的数量
- 索引就像厨房里的调料。适量的调料可以让食物更美味,但过多的调料会掩盖食物本身的味道。同样,过多的索引会降低数据库的性能。
7、如果索引列不能存储NULL值,请使用NOT NULL约束
- 例子:假设你有一个记录员工电话号码的字段,并且这个字段上建立了索引。如果允许NULL值,那么当查询电话号码为NULL的员工时,索引可能无法有效工作。通过使用NOT NULL约束,你可以确保索引始终有效。