如何通过索引让 SQL 查询效率最大化
什么时候创建索引?
如果出现如下情况,可以创建索引。
- 字段的数值唯一性的限制 索引可以起到约束的作用,比如唯一索引,主键索引,都可以起到唯一约束的作用。当字段的数值唯一时,可以考虑建立唯一索引或者主键索引。
- 频繁作为 Where 查询条件的字段 在表数据量比较大的时候,某个字段在 SQL 查询的 where条件时,就学英语给这个字段创建索引。
SELECT comment_id, product_id, comment_text, comment_time, user_id FROM product_comment WHERE user_id = 7851
运行结果
![ad70606a98dc3177306ed97f10dbcb7d.png](https://i-blog.csdnimg.cn/blog_migrate/2c89873beb60188988f810b94469f4c2.jpeg)
运⾏时间为0.699s,你能看到查询效率还是⽐较低的。当我们对user_id字段创建索引之后,运⾏时间为 0.047s,不到原来查询时间的1/10。
- 经常需要 Group By 和 Order By 的列
索引就是让数据按照某种顺序进行存储或检索,因此当我们使用 Group By 对数据查询或者使用 Order By 对数据进行排序的时候,就需要对分组或者排序字段建立索引。
SELECT user_id, count(*) as num FROM product_comment group by user_id limit 100
运⾏结果(100条记录,运⾏时间1.666s)
![c99a68bc7db822bf4bd8c26cebfa8104.png](https://i-blog.csdnimg.cn/blog_migrate/8130fb7321b3f194cef48d5a45df7244.jpeg)
对 user_id 创建索引,再执行 SQL 语句
SELECT user_id, count(*) as num FROM product_comment group by user_id limit 100
运⾏结果(100条记录,运⾏时间0.042s):
![fa53d2a35209f8d1633b7b88beb60f79.png](https://i-blog.csdnimg.cn/blog_migrate/1416ba54a2fcb7927dd7005877b93082.jpeg)
image
- DISTINCT 字