持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情
前言
上篇我们学习了MySQL中的索引创建。有兴趣的小伙伴可以阅读(MySQL学习-索引创建(二))。
下面我们继续学习MySQL中的索引设计。
索引设计
哪些情况适合创建索引
-
字段的数值有唯一性的限制
业务上具有唯一性的字段,即使是组合字段,也必须建成唯一索引。不要认为唯一索引会影响insert的速度,这个速度损耗可以忽略,但提高查找速度是明显的。 -
频繁作为WHERE查询条件的字段
某个字段在SELECT语句的WHERE条件中经常被用到,那么就需要给这个字段创建索引。尤其是数据量大的情况下,创建普通索引就可以大幅提升数据查询的效率。 -
经常GROUP BY和ORDER BY的列
索引就是让数据按照某种顺序进行存储或检索,因此当我们使用GROUP BY对数据进行分组查询,或者使用ORDER BY对数据进行排序的时候,就需要对分组或者排序的字段进行索引。如果待排序的列有多个,那么可以在这些列上建立组合索引。 -
UPDATE、DELETE的WHERE条件列
对数据按照某个条件进行查询后再进行UPDATE或DELETE的操作,如果对WHERE字段创建了索引,就能大幅提升效率。原理是因为我们需要先根据WHERE条件列检索出来这条记录,然后再对它进行更新或删除。如果进行更新的时候,更新的字段是非索引字段,提升的效率会更明显,这是因为非索引字段更新不需要对索引进行维护。 -
DISTINCT字段需要创建索引
有时候我们需要对某个字段去重,使用DISTINCT,那么对这个字段创建索引,也会提升效率。
如果查询一个60w条结果的记录,没有创建索引需要0.6s,创建索引后只需0.01s。不光效率有提升,查询的结果还是按照递增的顺序进行展示的。这是因为索引会对数据按照某种顺序进行排序,所以去重的时候也会快很多。
今天先学习到这里,明天继续。