Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL复杂索引是否涉及简单索引?_Mysql - Fatal编程技术网

MySQL复杂索引是否涉及简单索引?

MySQL复杂索引是否涉及简单索引?,mysql,Mysql,如果我用列(a、B)设置一个多列索引(例如唯一),并按a或B独立搜索,它们会像我在a和B中也有简单索引一样快吗 这些额外的简单索引是必要的吗?如果您创建的任何索引是(A,B),MySQL可以将该索引用于只有A或A然后B的查询和排序。它不能将其用于“B”。基本思想是索引的任何前缀都是有用的 您不必为“a”创建单独的索引,但是如果B要在where子句中进行排序或在没有“a”的where子句中使用,则需要为“B”创建一个索引。如果您创建的任何索引是(a,B),MySQL可以将该索引用于只有a或a然后B

如果我用列(a、B)设置一个多列索引(例如唯一),并按a或B独立搜索,它们会像我在a和B中也有简单索引一样快吗


这些额外的简单索引是必要的吗?

如果您创建的任何索引是(A,B),MySQL可以将该索引用于只有A或A然后B的查询和排序。它不能将其用于“B”。基本思想是索引的任何前缀都是有用的


您不必为“a”创建单独的索引,但是如果B要在where子句中进行排序或在没有“a”的where子句中使用,则需要为“B”创建一个索引。

如果您创建的任何索引是(a,B),MySQL可以将该索引用于只有a或a然后B的查询和排序。它不能将其用于“B”。基本思想是索引的任何前缀都是有用的


您不必为“a”创建单独的索引,但是如果B要在where子句中进行排序或在没有“a”的where子句中使用,则需要为“B”创建一个索引。

如果您创建的任何索引是(a,B),MySQL可以将该索引用于只有a或a然后B的查询和排序。它不能将其用于“B”。基本思想是索引的任何前缀都是有用的


您不必为“a”创建单独的索引,但是如果B要在where子句中进行排序或在没有“a”的where子句中使用,则需要为“B”创建一个索引。

如果您创建的任何索引是(a,B),MySQL可以将该索引用于只有a或a然后B的查询和排序。它不能将其用于“B”。基本思想是索引的任何前缀都是有用的

您不必为“a”创建单独的一个,但是如果要在where子句中对B进行排序或在where子句中使用B而不使用“a”,则需要为“B”创建一个单独的一个

如果表具有多列索引,则优化器可以使用索引的任何最左侧前缀查找行。例如,如果在(col1,col2,col3)上有一个三列索引,则在(col1),(col1,col2)和(col1,col2,col3)上有索引搜索功能

如果列不构成索引的最左侧前缀,MySQL将无法使用索引。假设您有如下所示的SELECT语句:

SELECT * FROM tbl_name WHERE col1=val1;
SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;

SELECT * FROM tbl_name WHERE col2=val2;
SELECT * FROM tbl_name WHERE col2=val2 AND col3=val3;
如果(col1、col2、col3)上存在索引,则只有前两个查询使用该索引。第三个和第四个查询确实涉及索引列,但是(col2)和(col2,col3)不是(col1,col2,col3)最左边的前缀。

来自MYSQL:

如果表具有多列索引,则优化器可以使用索引的任何最左侧前缀查找行。例如,如果在(col1,col2,col3)上有一个三列索引,则在(col1),(col1,col2)和(col1,col2,col3)上有索引搜索功能

如果列不构成索引的最左侧前缀,MySQL将无法使用索引。假设您有如下所示的SELECT语句:

SELECT * FROM tbl_name WHERE col1=val1;
SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;

SELECT * FROM tbl_name WHERE col2=val2;
SELECT * FROM tbl_name WHERE col2=val2 AND col3=val3;
如果(col1、col2、col3)上存在索引,则只有前两个查询使用该索引。第三个和第四个查询确实涉及索引列,但是(col2)和(col2,col3)不是(col1,col2,col3)最左边的前缀。

来自MYSQL:

如果表具有多列索引,则优化器可以使用索引的任何最左侧前缀查找行。例如,如果在(col1,col2,col3)上有一个三列索引,则在(col1),(col1,col2)和(col1,col2,col3)上有索引搜索功能

如果列不构成索引的最左侧前缀,MySQL将无法使用索引。假设您有如下所示的SELECT语句:

SELECT * FROM tbl_name WHERE col1=val1;
SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;

SELECT * FROM tbl_name WHERE col2=val2;
SELECT * FROM tbl_name WHERE col2=val2 AND col3=val3;
如果(col1、col2、col3)上存在索引,则只有前两个查询使用该索引。第三个和第四个查询确实涉及索引列,但是(col2)和(col2,col3)不是(col1,col2,col3)最左边的前缀。

来自MYSQL:

如果表具有多列索引,则优化器可以使用索引的任何最左侧前缀查找行。例如,如果在(col1,col2,col3)上有一个三列索引,则在(col1),(col1,col2)和(col1,col2,col3)上有索引搜索功能

如果列不构成索引的最左侧前缀,MySQL将无法使用索引。假设您有如下所示的SELECT语句:

SELECT * FROM tbl_name WHERE col1=val1;
SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;

SELECT * FROM tbl_name WHERE col2=val2;
SELECT * FROM tbl_name WHERE col2=val2 AND col3=val3;

如果(col1、col2、col3)上存在索引,则只有前两个查询使用该索引。第三个和第四个查询确实涉及索引列,但是(col2)和(col2,col3)不是(col1,col2,col3)最左边的前缀.

MySQL的可能副本实际上可以很好地解释复合索引的工作原理:。MySQL的可能副本实际上可以很好地解释复合索引的工作原理:。MySQL的可能副本实际上可以很好地解释复合索引的工作原理:。MySQL的可能副本实际上可以很好地解释了复合索引的工作原理:。感谢您的解释!:)谢谢你的解释!:)谢谢你的解释!:)谢谢你的解释!:)我会选择另一个答案,因为它更完整一点,但谢谢你的回答!;)我会选择另一个答案,因为它更完整一点,但谢谢你的回答!;)我会选择另一个答案,因为它更完整一点,但谢谢你的回答!;)我会选择另一个答案,因为它更完整一点,但谢谢你的回答!;)