NewID()が何をするのか知っているので、ランダム選択にどのように役立つかを理解しようとしています。それは、(1)selectステートメントがmytableからすべてを選択し、(2)選択された各行に対して、NewID()によって生成された一意の識別子を追加し、(3)この一意の識別子で行を並べ替え、(4)並べ替えられたリストから上位100を選択するということですか? ?
はい。これはほぼ正確です(ただし、必ずしもすべてを並べ替える必要はありません 行)。これは、実際の実行計画を確認することで確認できます。
SELECT TOP 100 *
FROM master..spt_values
ORDER BY NEWID()
スカラー計算演算子は、NEWID()
を追加します 各行(私の例のクエリではテーブルの2506)の列がオンになっている場合、テーブルの行はこの列で並べ替えられ、上位100が選択されます。
SQL Serverは、実際にはセット全体を位置100から下に並べ替える必要がないため、TOP N
を使用します。 ソート操作全体をメモリ内で実行しようとするソート演算子(N
の値が小さい場合) )