1

だから私は今日いくつかのクエリを書いていてtop 10、サンプルデータを取得するためだけにクエリを使用していて、orderby実際には呼び出しごとに異なるデータを返していることに気づきました。ただし、数百万行のテーブルであり、一部のエントリは常に表示され、他のエントリは呼び出しごとに変更されるため、ランダムには見えませんでした。orderbynoが指定されている場合に返す行を決定するために、バックエンドでどのロジックが実行されますか?SQL Server 2008r2を使用していますが、他のDBで別の方法で処理されるかどうか興味があります。

4

1 に答える 1

2

もちろん、順序は完全に未定義です。しかし、これは明示的に求められたため、実際の実装におけるいくつかの実際の原因について言及しようと思います。ここに小さなサンプルがあります:

  • 並列クエリプラン
  • 先読み結果がランダムな順序で返される
  • 何らかの理由で実行計画が変更されました
  • 列ストアインデックスを読み取ると、行が内部順序で返されます
  • SQL Serverは、論理的な順序ではなく割り当ての順序でページを読み取る、順序付けされていないインデックススキャンを選択しています(割り当ての順序は、たとえばテーブルを再編成することで変更できます)

これらの原因はSQLServerに固有です。

于 2012-06-14T22:54:28.427 に答える