SQL与ORDER BY子句中的索引

时间:2016-08-17 15:05:48

标签: sql indexing sql-order-by

在SQL中使用索引和使用ORDER BY子句有什么区别?

根据我的理解,索引以有序的方式排列指定的列,以帮助查询引擎快速查看表(从而防止表扫描)。

我的问题 - 为什么查询引擎只能使用ORDER BY来提高效果?

谢谢!

1 个答案:

答案 0 :(得分:0)

您将标记设置为sql-server-2008,但该问题与SQL Server无关。此问题将适用于所有数据库。 来自维基百科:

  

索引是一些存储引擎用于改进的技术   数据库性能。 许多类型的索引共享共同点   它们减少了在运行时检查每个条目的需要的属性   一个问题。在大型数据库中,这可以减少订单的查询时间/成本   大小。最简单的索引形式是值的排序列表   可以使用二进制搜索搜索,该搜索具有对条目位置的相邻引用,类似于书籍背面的索引。相同的数据可以有多个索引(员工数据库可以按姓氏和雇用日期编制索引)。

来自StackExchange

中的相关主题
  

在SQL世界中,顺序不是一组数据的固有属性。   因此,您的RDBMS无法保证您的数据会来   除非你,否则按照一定的顺序 - 或者甚至以一致的顺序 - 返回   使用ORDER BY子句查询数据。

要回答为什么索引是必要的?

  1. 请注意有关减少检查每个条目的需求的索引的粗体文本。如果在SQL中发出 ORDER BY 时没有索引,则需要检查每个条目,这会增加条目数。
  2. ORDER BY 仅在阅读时应用。索引中可以使用单个列,在这种情况下,sql查询请求中可能存在多种不同的排序。除非我们了解查询请求是如何进行的,否则无法定义索引。
  3. 一旦新的查询模式出现,很多时候会添加索引,以便保持查询性能,这意味着索引创建是由您在SQL中定义 ORDER BY 的方式驱动的。
  4. 使用/不使用 ORDER BY 处理SQL的查询引擎,定义您的执行计划并且不了解数据存储。如果数据位于缓存中且部分/完全来自磁盘,则从查询引擎检索的数据可能部分来自内存。当从存储引擎中的磁盘读取时,将使用索引来计算快速读取的数据。
  5. ORDER BY 会在阅读时影响查询的效果。在执行所有创建,读取,更新和删除操作时,索引会影响查询的性能。
  6. 查询引擎可以选择使用索引或完全忽略基于数据特征的索引。