0

我在给定查询中遇到记录顺序问题。

SELECT 
EA.eaid, --int , PK of table1
EA.an, --varchar(max)
EA.dn, --varchar(max)
ET.etid, --int
ET.st --int
FROM dbo.table1 EA
JOIN dbo.table2 ET ON EA.etid = ET.etid
JOIN @tableAttribute TA ON EA.eaid = TA.id -- TA.id is int and is not a PK
ORDER BY ET.st

ET.st 列的值对于给定场景中的所有记录都是相同的。

查询给出的记录顺序在更新统计信息时随机变化。有时它按 EA.eaid 的顺序排列,有时按 TA.id 的顺序排列。

请解释这种行为。统计数据如何影响这里的排序?

我正在使用 sql server 2008 R2。

4

1 回答 1

2

ORDER BY除非由子句指定,否则从数据库查询返回的行的顺序是未定义的。由于您只是排序,ET.st并且此列的所有值都相同,因此结果将以不确定的顺序返回(基于优化器确定的计划和使用的索引的顺序)。更新索引统计信息允许查询优化器选择最好的(通常是最确定的)索引;查询计划很可能已更改,从而导致出现不同的排序。

在我看来,您想订购的东西不是ET.st.

于 2012-07-18T04:15:06.180 回答