1.适合创建索引的情况
1、字段的数值有唯一性的限制
2、频繁作为 WHERE 查询条件的字段
某个字段在 SELECT 语句的 WHERE 条件中经常被使用到,那么就需要给这个字段创建索引了。尤其是在数据量大的情况下,创建普通索引就可以大幅提升数据查询的效率。
比如 student_info 数据表(含 100 万条数据),假设我们想要查询 student_id=123110 的用户信息。
①查看student_info表中的索引
可以看出,我们没有对student_id字段创建索引。
②进行如下查询,耗时220ms
③添加索引
alter table student_info add index idx_sid(student_id);
④再查询。耗时0ms。性能提升很大!
3、经常 GROUP BY 和 ORDER BY 的列
索引其实就是让数据按照某种顺序进行存储或检索。当我们使用 GROUP BY 对数据进行分组查询,或者使用 ORDER BY 对数据进行排序的时候,如果 对分组或者排序的字段建立索引,本身索引的数据就已经排好序了,进行分组查询和排序操作性能不好吗?另外,如果待排序的列有多个,那么可以在这些列上建立 组合索引 。
使用GROUP BY
和ORDER BY
,先看看不加索引的情况:
没有添加索引,大概执行时间900ms
加上索引
SELECT student_id,COUNT(*) AS num FROM student_info
GROUP BY student_id
LIMIT 100;
执行时间只要40ms,大概相差20多倍!
再考虑复杂一点的情况,group by和order by一起使用
这是只给student_id和create_time两列单独添加单列索引的情况。可以看到查询速度很慢,要5s多。
ALTER TABLE student_info ADD INDEX idx_sid_cre_time(student_id,create_time DESC);
添加联合索引
使用联合索引只需要耗时0.25ms!