当前位置: 首页 > 网络应用技术

mysql不加入索引吗?

时间:2023-03-09 01:23:55 网络应用技术

  今天的文章是一系列以前计划的“ 100,000个程序员”的文章。

  同事说,通常有采访问题要问mysql不在索引中?真的?

  今天,小工匠将带所有人理解这个问题。首先,我们需要使用解释关键字,因此我们需要了解此关键字。解释是执行计划,该计划可以输出mySQL语句的执行信息,以便我们可以确定是否达到索引以及它是否是优化。

  文章大纲

  首先,我们创建一个表格,插入一些数据以促进下面的测试。

  运行解释命令以获取以下内容

  这里有很多内容,但是只有这些领域值得我们关注

  让我们一一解释

  类型表示MySQL执行当前语句的类型。有几个值系统,const,eq_ref,ref,fullText,ref_or_null,index_merge,unique_subquery,index_subquery,range,index,index等。

  接下来,让我们谈谈行。当MySQL执行语句时,请评估预期的扫描行。

  最后,额外的关键内容,不要看他是一个扩展。但这很重要,因为他更好地帮助您定位这句话如何执行ISQL。我们选择关注。

  您还可以发现,无论是类型还是额外的类型,它们都会从落后的性能越来越差,因此当我们优化SQL时,我们必须尽量优化。可以分析不介绍索引是否不在索引。我们需要了解mysql.below的索引原理。BELOW是B+树的索引,这也是MySQL索引的原理。

  MySQL的每个索引都会构建一棵树,我们必须在心中做到这一点。

  为了快速讲述本文的详细信息,B+树的一些细节被适当地忽略了。

  然后我们开始分析索引的查询原理

  该语句的查询过程是:

  同时,让我们运行解释验证。类型是唯一索引的等效匹配值。

  以上是一个非常简单的查询,所以让我们看看有些复杂。

  该语句的查询过程是:

  我们继续进行解释。类型是指示索引查询的范围。Extra具有内容。这意味着范围查询使用比较后要比较的索引。

  好的,然后您进入了本文的高潮阶段。您怎么知道以下句子?

  有了我们的感觉,这次首先奔跑解释,它被打破了。果然,类型全部,扫描整个桌子,您是一个小工匠吗?这不是索引吗?

  好吧,这很尴尬。然后,让我们尝试另一句话。

  再试一次,看看您是否可以返回游戏。Sessencei这次采取了索引。

  那么,您为什么不第一次进行索引呢?好吧,让我们不去,让我们解密。

  选择索引时MySQL将优化。如果MySQL认为完整的表扫描高于索引+返回手表效率,那么他将选择一个完整的表扫描。返回我们的示例,全表扫描行为8,无需返回表。但是,如果您采用索引,则不仅需要扫描6次,而且需要6次才能返回表。然后MySQL会直接扫描完整表格,因此MySQL的默认优化使整个表可以扫描直接手表。

  那么,如果我只想接受索引,该怎么办?好吧,安排

  如果您感到放心,这次您不只是去索引吗?由于极限的增加,当MySQL优化时,发现索引 +返回表的性能更高。

  因此,最后,让我们谈谈不进行索引的原理,这样您就可以不保证了吗?再次回到我们的索引图。

  真正执行该声明

  在上面,我们已经讨论了>和<如何在这种情况下使用索引,因此您是否分析了此拆卸语句?此陈述分解后根据索引,当您遇到某人告诉您不要接受索引时,您知道该说些什么吗?

  本文是一系列“ 100,000个程序员”一系列的文章。如果您有更多疑问,可以给我留言,或检查我的订阅号码“ Codemith Notes”以查看一系列文章。

  参考buggata书“从根本上理解mysql”

  原始:https://juejin.cn/post/710296855054070799