当前位置: 首页 > 面试题库 >

MySQL索引和顺序

厉坚
2023-03-14
问题内容

这是我永远遇到的一个问题。

据我所知,索引的顺序很重要。因此,类似的索引与[first_name, last_name] 并不相同[last_name, first_name],对吧?

如果我仅定义第一个索引,是否意味着它将仅用于

SELECT * FROM table WHERE first_name="john" AND  last_name="doe";

而不是

SELECT * FROM table WHERE  last_name="doe" AND first_name="john";

由于我使用的是ORM,所以我不知道这些列的调用顺序。这是否意味着我必须在所有排列上添加索引?如果我有2列索引,那是可行的,但是如果我的索引是3列或4列怎么办?


问题答案:

当查询条件仅适用于 部分 索引时,索引顺序很重要。考虑:

  1. SELECT * FROM table WHERE first_name="john" AND last_name="doe"

  2. SELECT * FROM table WHERE first_name="john"

  3. SELECT * FROM table WHERE last_name="doe"

如果你的索引是(first_namelast_name)查询1和2将使用它,查询#3不会。如果你的索引是(last_namefirst_name)查询1和3将使用它,查询#2不会。在两种情况下,在WHERE子句中更改条件顺序均无效。

详情在这里

更新
如果上述内容不清楚-
如果查询条件中的列形成索引的最左前缀,则MySQL仅可以使用索引。上面的查询#2不能使用(last_namefirst_name因为它只是基于)指数first_namefirst_name不是(最左边的前缀last_namefirst_name)指数。

查询中条件的顺序无关紧要;上面的查询#1可以很好地使用(last_namefirst_name)索引,因为它的条件是
first_name和,last_name并且加在一起,它们确实形成(last_namefirst_name)索引的最左前缀。



 类似资料:
  • 在 FreeMarker 2.3.23 中,指令名可以使用驼峰样式来代替蛇形样式, 比如 startsWith 代替 starts_with。 但是要知道,在相同模版内,FreeMarker 会强制对模板语言部分的所有标识符使用驼峰样式 (用户自定义名称不会受影响)。 abs ancestors api boolean byte c for strings, for booleans cap_fi

  • $ ${...},  插值 # #,  总体结构, 指令 #{...},  #{...}: 数字插值 < <#...>,  指令 <#--...-->,  总体结构 A ABC,  lower_abc, upper_abc abs built-in,  abs absolute value,  abs acquisition,  使用获得机制 adding hashes,  连接 adding s

  • 主要内容:为什么要使用索引,索引的优缺点索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。本节将详细讲解索引的含义、作用和优缺点。 通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列。否则,数据库系统将读取每条记录的所有信息进行匹配。 可以把索引比作新华字典的音序表。例如,要查“库”字,如果不使用音序,就需要从字典的 400 页中逐页来找。但是,如果提取拼音出来,构成音序表

  • 问题内容: 任何人都可以从官方MySQL文档中澄清这一点 使用索引…查找特定索引列key_col的MIN()或MAX()值。这由预处理器优化,该预处理器检查是否在索引中在key_col之前出现的所有关键部分上使用WHERE key_part_N =常量。在这种情况下,MySQL对每个MIN()或MAX()表达式执行一次键查找,并将其替换为常量。如果所有表达式都用常量替换,查询将立即返回。例如: S

  • 本文向大家介绍MySQL索引使用说明(单列索引和多列索引),包括了MySQL索引使用说明(单列索引和多列索引)的使用技巧和注意事项,需要的朋友参考一下 1. 单列索引 在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列:在Where子句中出现的列,在join子句中出现的列。请看下面这个查询: 这个查询与前面的查询略有不同,但仍属于简单查询。由于age是

  • 本文向大家介绍MySQL索引之主键索引,包括了MySQL索引之主键索引的使用技巧和注意事项,需要的朋友参考一下 在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别? 上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。 1、主键索引 主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一个表可以没