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 に答える