Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

поръчка чрез newid() - как работи?

Знам какво прави 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 )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразувайте текстовата стойност в SQL Server от UTF8 в ISO 8859-1

  2. Лесен начин изберете дясната колона като първичен ключ за дадена таблица

  3. Различни начини за наблюдение на групите за наличност на SQL Server AlwaysOn

  4. varbinary към низ на SQL Server

  5. Как да задам променлива от SQL заявка?