【问题标题】:Indexes in SQL vs ORDER BY clauseSQL 与 ORDER BY 子句中的索引
【发布时间】:2016-08-17 15:05:48
【问题描述】:

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

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

我的问题 - 为什么查询引擎不能简单地使用 ORDER BY 来提高性能?

谢谢!

【问题讨论】:

  • 它们是两种截然不同的东西。 order by 可以使用正确排序的索引,因此不必在每次运行查询时都计算出顺序...
  • 好吧,你说它们是两个非常不同的东西?你的意思是 - ORDER BY - 查询索引 - 存储数据的方式。如果这是真的,那么我想我现在明白为什么这篇文章是完全错误的了....

标签: sql indexing sql-order-by


【解决方案1】:

您将标签设置为 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. 查询引擎可以根据数据特征选择使用索引或完全忽略索引。

【讨论】:

    猜你喜欢
    • 2018-04-29
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2022-07-04
    相关资源
    最近更新 更多