sql >> Databáze >  >> RDS >> Sqlserver

order by newid() - jak to funguje?

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 )



  1. Aktualizace MySQL spojené tabulky

  2. Textové nebo číselné pole – jednoduchá metoda SQL pro přepínání datových typů

  3. Cizí klíč k více tabulkám

  4. Jak provést automatické zvýšení primárního klíče tabulky MySQL s nějakou předponou