-
少用or,用它来连接时索引会失效。
-
like查询以%开头。
-
字符串不加单引号索引失效。
-
如果mysql估计使用全表扫描要比使用索引快,则不使用索引。
-
在MYSQL使用不等于(<,>,!=)的时候无法使用索引,会导致索引失效。
-
is null或者is not null 也会导致无法使用索引。
-
不在索引列上做任何操作(计算,函数,(自动或者手动)类型装换),会导致索引失效而导致全表扫描。
-
最佳左前缀法则——如果索引了多列,要遵守最左前缀法则。
索引优化原则
给需要的字段加索引
一般需要加索引的都是where中经常使用的字段,但是像性别这种属性字段,加索引的意义不大,因为性别这类字段选择性太低(基础/总数)。
如下所示,如果userinfo表中的数据90%以上,都是性别为男的用户,这个时候给sex字段加索引,收效甚微,
select sum(sex=‘男’) as sexCount,sum(1) as countNum from userinfo
结果:
sexCount countNum
4 5
错误的为每个列创建独立索引
有些人可能会把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
正确使用联合索引
联合索引一定要注意索引顺序,一般放在前面的都是选择性比较高的索引字段。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V:vip1024b 备注Java获取(资料价值较高,非无偿)
总结
面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。
我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
面试题及解析总结
大厂面试场景
知识点总结
片转存中…(img-IycbP4aK-1711573401675)]
大厂面试场景
[外链图片转存中…(img-gxpXC3h1-1711573401675)]
知识点总结
[外链图片转存中…(img-P7mFfl2x-1711573401675)]