Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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_Sql - Fatal编程技术网

Mysql 为什么在您排序的内容上添加索引会减少排序的工作量?

Mysql 为什么在您排序的内容上添加索引会减少排序的工作量?,mysql,sql,Mysql,Sql,从这里开始: 在某些情况下,MySQL可以使用索引来满足ORDERBY子句,而无需进行任何额外排序。 我认为索引有助于检索特定的数据片段(如数组中的索引),在索引时会给您一个O(1)而不是O(n)。但是在排序时,我假设他们使用基于排序列的任何O(nlogn)或某种算法,但是显然索引排序所依据的列可以减少所涉及的工作量 这是怎么回事?(我不确定这是一般的SQL还是MySQL)一个简单的答案:通常,索引本身是按排序顺序存储的(否则,使用索引快速查找记录将非常困难!)因此,“在某些情况下”(当orde

从这里开始:

在某些情况下,MySQL可以使用索引来满足ORDERBY子句,而无需进行任何额外排序。

我认为索引有助于检索特定的数据片段(如数组中的索引),在索引时会给您一个O(1)而不是O(n)。但是在排序时,我假设他们使用基于排序列的任何O(nlogn)或某种算法,但是显然索引排序所依据的列可以减少所涉及的工作量


这是怎么回事?(我不确定这是一般的SQL还是MySQL)

一个简单的答案:通常,索引本身是按排序顺序存储的(否则,使用索引快速查找记录将非常困难!)因此,“在某些情况下”(当order BY与索引的排序顺序匹配时),数据可以通过其索引顺序返回,“无需进行任何额外排序”


进一步:正如@Will A的回答提醒我的,您可能希望了解扩展此概念的方法。

对索引中的一行执行查找可能是O(logn)操作或其他操作

然而,当以“排序顺序”读取索引时,通常执行的是树遍历,甚至是列表遍历,这将是O(n)。如果索引包含满足查询输出所需的所有信息,那么这将比读取和排序数据快得多


这是一个通用的SQL东西,不是特定于MySQL的。

它是通用的,不是特定于MySQL的。想想一本书的索引——如果你正在寻找一个术语,你需要翻阅整本书还是分类索引才能找到它在哪一页?@Oded:我很熟悉它在查找特定项目时的工作原理——我不确定它在对项目列表进行排序时是如何工作的,不管是否已编制索引。+1关于包含满足查询所需的所有信息的索引,这是一个很好的观点。这就是为什么在通常查询的数据上可以很有用的原因。