深入聊聊Mysql索引建立的场景

上网导航 2023-09-05 349 0条评论
摘要: Hello大家好,我是枫哥。今天跟大家聊一聊sql优化索引建立的场景。 引言:什么是...

Hello大家好,我是枫哥。今天跟大家聊一聊sql优化索引建立的场景。

引言:

什么是索引?有何用?

哪些情况下适合建立索引?

建立索引的场景:场景一:在where字段后面的字段建立索引

深入聊聊Mysql索引建立的场景

未添加索引前,耗费0.383秒,基本遍历整个表

深入聊聊Mysql索引建立的场景

添加索引后,耗费0.001秒,使用了索引

深入聊聊Mysql索引建立的场景

在频繁的查询的业务中可以对where筛选的字段建立索引,如果where筛选的字段有多个还可以建立联合索引

场景二:经常group by和order by的字段上建立索引(因为索引本身就是排好序的,相当于查询之前就已经进行了排序

建立索引前,耗时0.501秒,使用的是所有数据在内存中排序

深入聊聊Mysql索引建立的场景

建立索引后,耗时0.01秒

深入聊聊Mysql索引建立的场景

场景三:在具有唯一性约束的字段上建立唯一索引(查找到目标即可返回不用继续查找)

具有唯一性约束的字段上就可以建立唯一索引,虽然建立了唯一索引对insert操作有一定的影响(需要判断新增的数据是否已经在表中),但是建立唯一索引对于查询的效率是显著提升的,例如上面的例子,因为建立了唯一索引,一旦查找到id为1001的学生信息之后就不需要判断数据库中是否还有id等于1001的学生(只有唯一一份),直接返回信息即可,如果没有建立索引,那么就需要全表扫描。

场景四:在DISTINCT后面的字段添加索引(索引已经将相同的字段排好序,去重效率更高)

建立了索引,那么默认就是按照索引字段的升序排列的,那么相同值的字段也就排列在一起了,那么去重也就变得简单、高效。

场景五:在join多表连接大表中的连接字段建立索引

没有建立索引之前,耗时0.697s,没有使索引

深入聊聊Mysql索引建立的场景

建立索引后,使用了索引,耗时0.003s

深入聊聊Mysql索引建立的场景

小表驱动大表:

通过对小表进行逐一遍历,同时在大表中的连接字段建立索引即可加快查询,本案例中,每次取出课程表中course_id和学生表中学生的course_id进行连接操作,在学生表中对course_id建立索引即可

场景六:使用字符串的前缀建立索引

前缀建立索引的原因:

深入聊聊Mysql索引建立的场景

场景七:在频繁使用的列上建立索引或联合索引(频繁使用的字段应该在索引的左侧)

深入聊聊Mysql索引建立的场景

深入聊聊Mysql索引建立的场景

小结

最近在更新过关斩将系列——java面试题,全力帮助小白突破面试大关,目前已经更新至第21篇感兴趣可以关注公众号IT枫斗者追更!

往期回顾

有关java面试题系列专题,已分享整理在公众号首页—面试宝典系列,还有真实企业面试,经典offer成功案例等。

如果本文对你有帮助的话,欢迎点赞&在看&分享,这对我继续分享&创作优质文章非常重要。非常感谢!

深入聊聊Mysql索引建立的场景

文章版权及转载声明:

作者:上网导航本文地址:https://www.90xe.com/post/3648.html发布于 2023-09-05
文章转载或复制请以超链接形式并注明出处技术导航

分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏