2011-02-15 57 views
1

什么会导致SQL Server 2005以不同的顺序返回SELECT的结果。哪些情况会导致select返回不同的订单

注意: 我不知道,如果该事项,但查询有一个非唯一列的Order by条款(日期栏要具体)和表是一个临时表。

编辑: 我知道,如果我不会指定它的顺序是没有保证的,但平时基本一致,直到事情发生。

我想知道这会发生什么“事情”。

谢谢。

回答

0

如果按非唯一列进行排序,那么在对该列进行保证排序后,给定组内的行的顺序不保证 - 正如awm所说的那样,取决于数据库。插入可以更改顺序,连接可以更改顺序,更新可能会更改顺序。

如果您需要保证订单,请在您的order by中指定一组保证订单的列。

+0

更新如何更改订单? – 2011-02-15 09:34:18

1

如果在ORDER BY列中有重复的值,那么这些值的顺序是未定义的。订单是数据库发现最方便的任何事情,并且可以随时因任何原因而更改。

+0

谢谢,但请参阅编辑。 – 2011-02-15 09:33:25

+0

即使是内部垃圾收集,东西也可能是任何东西,但它很可能是表更新或优化。 – awm 2011-02-15 09:40:46

0

说不过去,为什么它应该改变并不重要,如果有的话。

查询引擎特定文档订单是未指定如果您没有实际指定它。

一如既往,依靠无证行为的一般建议是不要做

原因,它可能会改变(毫无疑问的是别人的,但为什么你的运气?):

  • 查询
  • 陈旧的指标得到更新
  • 维护重新编译已在服务器上运行,重建索引
0

你说

我知道订单不是 保证如果我不指定它,但 它通常一致,直到 发生。

我想你的意思是说

我知道,为了不 保证,如果我不指定,所以 它总是不可靠的,无论怎样 一致的外观。

任何影响查询优化程序关于执行计划的决定都会改变无序行的顺序。

相关问题