Vím, co NewID() dělá, jen se snažím pochopit, jak by to pomohlo při náhodném výběru. Je to tak, že (1) příkaz select vybere VŠECHNO z mé tabulky, (2) pro každý vybraný řádek přiřadí jedinečný identifikátor vygenerovaný pomocí NewID(), (3) seřadí řádky podle tohoto jedinečného identifikátoru a (4) vybere prvních 100 ze seřazeného seznamu ?
Ano. to je v podstatě přesně správné (až na to, že nemusí nutně řadit vše řádky). Můžete si to ověřit pohledem na skutečný plán provádění.
SELECT TOP 100 *
FROM master..spt_values
ORDER BY NEWID()
Výpočetní skalární operátor přidá NEWID()
sloupec pro každý řádek (2506 v tabulce v mém příkladu dotazu), pak jsou řádky v tabulce seřazeny podle tohoto sloupce s vybranými 100 nejlepšími.
SQL Server ve skutečnosti nepotřebuje třídit celou sadu od pozic 100 dolů, takže používá TOP N
operátor řazení, který se pokouší provést celou operaci řazení v paměti (pro malé hodnoty N
)