关于java:Java面试这道互联网高频面试题难住了80的程序员索引什么时候失效

“索引什么时候生效?”

面试过程中,从天而降的一个问题,是不是有点懵?

没关系,关注我,面试不迷路。

我是Mic,一个工作了14年的Java程序员。

索引生效波及到的知识点十分多,所以我把这个问题的答复整顿到了一个20W字的面试文档外面,大家能够支付。

上面看看高手的答复

高手:

InnoDB引擎外面有两种索引类型,一种是主键索引、一种是一般索引。

InnoDB用了B+树的构造来存储索引数据。

当应用索引列进行数据查问的时候,最终会到主键索引树中查问对应的数据行进行返回。

实践上来说,应用索引列查问,就能很好的晋升查问效率,然而不标准的应用会导致索引生效,从而无奈施展索引自身的价值。

导致索引生效的状况有很多:

  1. 在索引列上做运算,比方应用函数,Mysql在生成执行打算的时候,它是依据统计信息来判断是否要应用索引的。

    而在索引列上加函数运算,导致Mysql无奈辨认索引列,也就不会再走索引了。

    不过从Mysql8开始,减少了函数索引能够解决这个问题。

  2. 在一个由多列形成的组合索引中,须要依照最左匹配法令,也就是从索引的最左列开始程序检索,否则不会走索引。

    在组合索引中,索引的存储构造是依照索引列的程序来存储的,因而在sql中也须要依照这个程序能力进行逐个匹配。

    否则InnoDB无奈辨认索引导致索引生效。

  3. 当索引列存在隐式转化的时候, 比方索引列是字符串类型,然而在sql查问中没有应用引号。

    那么Mysql会主动进行类型转化,从而导致索引生效。

  4. 在索引列应用不等于号、not查问的时候,因为索引数据的检索效率非常低,因而Mysql引擎会判断不走索引。
  5. 应用like通配符匹配后缀%xxx的时候,因为这种形式不合乎索引的最左匹配准则,所以也不会走索引。

    然而反过来,如果通配符匹配的是前缀xxx%,合乎最左匹配,也会走索引。

  6. 应用or连贯查问的时候,or语句前后没有同时应用索引,那么索引会生效。只有or左右查问字段都是索引列的时候,才会失效。

除了这些场景以外,对于多表连贯查问的场景中,连贯程序也会影响索引的应用。

不过最终是否走索引,咱们能够应用explain命令来查看sql的执行打算,而后针对性的进行调优即可。

总结

Mysql外面很多问题都能够考查毕竟它也是工作中应用十分频繁的组件,按情理来说,咱们是有必要去深度学习Mysql的底层原理。

毕竟数据的安全性、数据IO性能都会影响到零碎的整体吞吐量。

大家记得点赞、珍藏加关注。

版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自 Mic带你学架构
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据