2010-01-19 66 views
2

我的查询返回的查询结果似乎是排序的,尽管没有可用的语句顺序。这可能是聚集索引的优点。使用索引排序

是否明智地依靠索引进行排序?

依赖索引进行排序是否是最佳做法?

感谢

+0

忘了提及iam使用asp.net应用程序访问数据 – Prady 2010-01-19 04:41:48

回答

3
  • 是的,由于聚簇索引,数据显示为预排序。聚集索引意味着这些行按照索引的顺序进行物理排列,这在大多数情况下(并非全部)都是如何检索的。

  • 如果没有聚集的索引,那么将按照它们插入的顺序检索行。

  • 不,这不依赖于此。如果您决定执行JOINDISTINCT或对查询进行任何其他更改,则可以轻松地拆分排序顺序。另一方面,如果您使用的是ORDER BY,并且SQL Server知道数据已经按照该顺序排列,那么它将优化冗余排序,因此无需花费任何代价。

  • 因此,总是ORDER BY,即使它看起来你不需要它。

+0

有关MSDN上聚簇索引的文章 http://msdn.microsoft.com/en-us/library/aa933131%28SQL.80%29.aspx – keith 2010-01-19 04:51:29

1

如果你需要一个特定的排序顺序最好的做法是使用ORDER BY子句指定。

尽管没有ORDER BY子句,但几乎所有的数据库实现都使用了我曾经使用的数据库实现,但它的行为是数据库如何工作的副作用。事实是,数据库(同样是我工作过的)不能保证排序的顺序,除非你指定它,所以没有指定它,你会受到数据库实现和任何副作用的制约。基本上,如果您需要以完全可预测的方式返回记录,则应指定它。

1

我的查询返回的查询结果似乎排序,虽然没有可用的语句顺序。

这是因为数据是基于插入数据的顺序返回的。为了保证订单始终保持一致,您需要定义一个ORDER BY条款。

索引可以加快查询排序的速度,但如果没有使用带索引的列的ORDER BY子句,则索引不会产生影响。

1

除非您使用ORDER BY,否则不能依赖您获得结果的顺序。我猜这取决于你的数据库,但是当你需要的时候指定一个订单总是最佳实践。

1

无论其他细节如何,只要您关心SQL查询的结果顺序,唯一可以做的就是包含ORDER BY子句以确保您获得所需的订单。作为替代方法,您可以(当然)随机检索并稍后进行排序 - 但使用SQL来完成这项工作通常是一个更好的主意。主要的例外是如果你需要做一些事情来填充列表,并希望用户能够根据不同的列重新排序。在这种情况下,无论如何你都要在客户端进行排序(可能是JS),所以你不妨使用它。

0

数据可能显示为已排序,但您不能依赖该数据。假设你在RAM中有一些你需要的数据,而剩下的数据仍然在磁盘上。系统可以并行并开始返回内存中的数据,而其余部分则从磁盘中提取并返回。你根本无法依靠它,如果你需要订购,绝对应该订购你的数据。