Row_Number() OVER (ORDER BY (SELECT 1))
トリックはすべきではありません 基になるデータの順序を変更しないようにする方法と見なされます。これは、サーバーに追加の不要な並べ替えを実行させないようにするための手段にすぎません(並べ替えを実行することはできますが、列による並べ替えと比較した場合、コストは最小限に抑えられます)。
SQLServerのすべてのクエリは絶対に必要 ORDER BY
があります 結果が保証された方法で確実に順序付けられるようにするための最も外側のクエリの句。
「元の順序を保持する」という概念は、リレーショナルデータベースには存在しません。 ORDER BY
になるまで、テーブルとクエリは常に順序付けされていないと見なす必要があります。 句は最も外側のクエリで指定されます。
同じ順序付けされていないクエリを100,000回試行し、常に同じ順序で受け取ることができるため、その順序付けに頼ることができると信じるようになります。しかし、それは間違いです。ある日、何かが変化し、期待した順序にならなくなるからです。 1つの例は、データベースが新しいバージョンのSQL Serverにアップグレードされた場合です。これにより、多くのクエリで順序が変更されました。しかし、それはそれほど大きな変化である必要はありません。インデックスを追加または削除するだけで、違いが生じる可能性があります。その他:サービスパックのインストール。テーブルのパーティション化。問題のテーブルを含むインデックス付きビューを作成します。シークの代わりにスキャンが選択される転換点に到達する。など。
「サーバー、ORDER BY
」と言わない限り、注文される結果に依存しないでください。 "。