Знам какво прави NewID(), просто се опитвам да разбера как би помогнало при произволния избор. Дали (1) операторът select ще избере ВСИЧКО от моята таблица, (2) за всеки избран ред, ще прикрепи уникалния идентификатор, генериран от NewID(), (3) сортира редовете по този уникален идентификатор и (4) избере първите 100 от сортирания списък ?
да. това е почти точно правилно (освен не е задължително да сортира всички редовете). Можете да проверите това, като разгледате действителния план за изпълнение.
SELECT TOP 100 *
FROM master..spt_values
ORDER BY NEWID()
Изчислителният скаларен оператор добавя NEWID()
колона за всеки ред (2506 в таблицата в моята примерна заявка), след което редовете в таблицата се сортират по тази колона с избрани най-добрите 100.
SQL Server всъщност не трябва да сортира целия набор от позиции 100 надолу, така че използва TOP N
оператор за сортиране, който се опитва да изпълни цялата операция за сортиране в паметта (за малки стойности на N
)