假设我的表上有一个多列索引。例如,索引位于列a、b和c上。
现在我想搜索如下内容: select * from my_table where a=1 order by id DESC。
我想知道我是否必须创建另一个索引,如,id,以使我的查询更快,或者前面提到的索引就足够了。我之所以问这个问题,是因为我不知道MySQL如何在多列索引上按id排序。
发布于 2020-09-02 07:41:57
对于WHERE a=1 ORDER BY id,INDEX(a,b,c)只有部分用处。
使用ENGINE=InnoDB和id作为PRIMARY KEY,INDEX(a,b,c)几乎与INDEX(a,b,c,id)相同。但是尝试将其用于查询--当它看到b时就会停止。
首先,想一想按姓氏排序的名字列表。查询是... WHERE last = 'gates' ORDER BY first。现在想象一下这个列表。所有的“盖茨”都会在那里,这是first已经订购的。
该索引的布局类似于INDEX(a,id)。(或者假设id是静默附加的INDEX(a)。)
关于创建最佳索引的更多信息,给定一个查询:http://mysql.rjweb.org/doc.php/index_cookbook_mysql
哦,"DESC“简单地从最后开始--“盖茨,扎克”--然后倒着读这个列表,直到你读过第一个“盖茨”。
搜索"Joe G.“索引将是无用的。但是,也可以使用INDEX(first, last)。在搜索"J. G.“时,没有任何名称索引是非常无用的。
https://stackoverflow.com/questions/63674952
复制相似问题