このクエリを実行すると
select top 100 * from mytable order by newid()
私のテーブルから100個のランダムなレコードを取得します。
newid()
ただし、リストに表示されないため、どのように機能するかについて少し混乱していselect
ます。誰か説明できますか?ここに何か特別なことがありnewid()
ますか?
このクエリを実行すると
select top 100 * from mytable order by newid()
私のテーブルから100個のランダムなレコードを取得します。
newid()
ただし、リストに表示されないため、どのように機能するかについて少し混乱していselect
ます。誰か説明できますか?ここに何か特別なことがありnewid()
ますか?
私は NewID() が何をするか知っています。ランダムな選択にどのように役立つかを理解しようとしています。(1) select ステートメントは mytable からすべてを選択し、(2) 選択された行ごとに、NewID() によって生成された uniqueidentifier を追加し、(3) この uniqueidentifier で行をソートし、(4) 一番上を選択します。ソートされたリストから100?
はい。これはほぼ正確です (ただし、すべての行を並べ替える必要はありません)。これは、実際の実行計画を見ることで確認できます。
SELECT TOP 100 *
FROM master..spt_values
ORDER BY NEWID()
計算スカラー演算子は、NEWID()
行ごとに列を追加します (私の例のクエリのテーブルでは 2506)。次に、テーブルの行はこの列で並べ替えられ、上位 100 が選択されます。
SQL Server は実際にはセット全体を位置 100 から下に並べ替える必要はないためTOP N
、メモリ内で並べ替え操作全体を実行しようとする並べ替え演算子を使用します (の小さい値の場合N
) 。
一般に、次のように機能します。