Mysql索引使用的正确姿势,2024年大厂Java面经

错误的为每个列创建独立索引

有些人可能会把where条件后面所有的字段都加上索引,但是后面却会发现这样做起到的效果收效甚微,这个时候我们因该优先使用联合索引。

如下所示:虽然我给name和age都设置了索引,但是真正使用到的只有name索引。如果用户表中存在大量名叫张三的用户,那age就需要进行二次筛选,这就会耗费相当的资源。

select * from userinfo where name= ‘张三’ and age=21

索引使用情况:

1 SIMPLE userinfo ref name,age name 768 const 1 33.33 Using where

如果我们给name+age设置联合索引,我们就可以快速检索到我们需要的数据,不需要进行二次筛选。

索引使用情况:

1 SIMPLE userinfo ref name_age name_age 773 const,const 1 100

正确使用联合索引

联合索引一定要注意索引顺序,一般放在前面的都是选择性比较高的索引字段。

例如一个用户表,需要查询手机号为138+性别为女的数据,如果是性别+手机号这样的顺序作为联合索引,就会导致第一次索引的数据很大,再用手机接着索引效率就会特别低,如果索引顺序反过来就可以避免这类问题。

避免检索全部

一定要避免select *from的出现,因为这样不仅不会用到覆盖索引,而且数据传输也会耗费很长的时间。

如果select出来的字段都在where条件之内,这种情况就叫做覆盖索引。覆盖索引检索出来的数据可以直接返回给前端,不需要通过id去查询其它字段,所以效率更高。

order by排序字段注意重排序

使用索引字段来做排序,如果order by排序的字段不在索引中,则会导致数据重排,如果数据量较大会很耗费cpu性能。

如下所示,pwd字段不在索引里面,就会导致Using filesort的出现。

EXPLAIN

select * from userinfo where name= ‘张三’ and age=21 ORDER BY pwd;

索引使用情况:

1 SIMPLE userinfo ref name_age name_age 773 const,const 1 100 Using index condition; Using filesort

去除冗余索引

去除不必要的冗余索引,在添加索引的时候,可能有人不注意会设置重复的索引,像用户名称+年龄的联合索引和用户名称的单列索引,就是典型的冗余索引字段。

name_age name, age NORMAL 0 A 3 0

name name NORMAL 0 A 3 0

SQL索引检查:

我们写完SQL之后,要如何确定这条SQL有没有用到索引,用到的索引具体是哪一个,不用着急,这边我们可以用explain关键字来进行SQL索引分析。explain用法,这节课暂时不多说,更多的内容我会在下一章中给大家详细介绍。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

金三银四马上就到了,希望大家能好好学习一下这些技术点

学习视频:

大厂面试真题:

711947378416)]

最后

金三银四马上就到了,希望大家能好好学习一下这些技术点

学习视频:

[外链图片转存中…(img-UVuTKXXp-1711947378417)]

大厂面试真题:

[外链图片转存中…(img-FzlG36Rp-1711947378417)]

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值