按索引列排序

Cra*_*lus 0 sql sql-server indexing performance sql-order-by

我不清楚以下内容:
假设我有一个表A,我已经在列上创建了一个索引X.
如果我根据列进行选择,结果将被排序,对吧?
但是,如果由于某种原因我做了一个选择后跟一个ORDER BY X(例如我不知道列被索引),SQL服务器会执行排序执行顺序访问还是会去使用索引?

mar*_*c_s 5

如果您没有ORDER BYSELECT查询中指定,那么就没有任何保证/没有确定性排序.

数据将被返回 - 但不保证任何订单(或者下次查询时它将以相同的顺序返回)

所以,如果你需要一个订单 -那么你必须指定一个ORDER BY在你的SELECT-它仅仅是为.

是的 - 如果有一个索引,如果它有意义 - 那么SQL Server查询优化器确实会使用该索引.但是涉及很多ifsbuts - 它可能 - 或者可能不会 - 使用索引 - 这完全取决于优化器的决定(这取决于很多因素 - 这里列出的太多了).

(这特别适用于我熟悉的SQL Server - 我不知道其他RDBMS如何处理这种情况)

  • **不保证任何订单** - 除非您**特别**使用`ORDER BY`要求它.只是习惯它. (3认同)
  • @Cratylus - 例如SQL Server可能会在[分配顺序]中扫描索引(http://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/11/09/when-can-allocation-order-scans-be- used.aspx)而不是索引键顺序.或者使用旋转扫描功能. (3认同)