错误的为每个列创建独立索引
有些人可能会把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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
金三银四马上就到了,希望大家能好好学习一下这些技术点
学习视频:
大厂面试真题:
711947378416)]
最后
金三银四马上就到了,希望大家能好好学习一下这些技术点
学习视频:
[外链图片转存中…(img-UVuTKXXp-1711947378417)]
大厂面试真题:
[外链图片转存中…(img-FzlG36Rp-1711947378417)]