Saya tahu apa yang dilakukan NewID(), saya hanya mencoba memahami bagaimana hal itu akan membantu dalam pemilihan acak. Apakah itu (1) pernyataan pilih akan memilih SEMUA dari tabel saya, (2) untuk setiap baris yang dipilih, tempelkan pada pengidentifikasi unik yang dihasilkan oleh ID Baru (), (3) urutkan baris berdasarkan pengidentifikasi unik ini dan (4) pilih 100 teratas dari daftar yang diurutkan ?
Ya. ini cukup tepat (kecuali tidak perlu mengurutkan semua baris). Anda dapat memverifikasi ini dengan melihat rencana eksekusi yang sebenarnya.
SELECT TOP 100 *
FROM master..spt_values
ORDER BY NEWID()
Operator skalar komputasi menambahkan NEWID()
kolom aktif untuk setiap baris (2506 dalam tabel dalam contoh kueri saya) maka baris dalam tabel diurutkan berdasarkan kolom ini dengan 100 teratas dipilih.
SQL Server sebenarnya tidak perlu mengurutkan seluruh rangkaian dari posisi 100 ke bawah sehingga menggunakan TOP N
operator sortir yang mencoba melakukan seluruh operasi sortir dalam memori (untuk nilai kecil N
)