Разница между New_Id () и Rand () SQLSERVER2005 - PullRequest
3 голосов
/ 07 июня 2009

Как функция newid () работает в фоновом режиме?

В чем разница между rand () и newid ()?

Что эффективнее?

Заранее спасибо.

Ответы [ 5 ]

4 голосов
/ 07 июня 2009

Проблема с rand заключается в том, что он возвращает одинаковое значение для всех строк вызова. newid будет отличаться для каждого ряда. Эта статья объясняет вещи ясно

https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6089823.html#

2 голосов
/ 07 июня 2009

"Что эффективнее?" Для чего?

Каков контекст? Что ты пытаешься сделать?

RAND () возвращает псевдослучайное значение с плавающей запятой, от 0 до 1, исключая.

NEWID () создает уникальное значение типа uniqueidentifier.

1 голос
/ 07 июня 2009

newid () на самом деле не генерирует случайные числа, он генерирует идентификаторы GUID, которые имеют случайную часть, и хорошо служат своей цели для случайного упорядочения.

С точки зрения того, что является более эффективным, когда упорядочение является фактором, на самом деле его больший вопрос является более случайным. По умолчанию без каких-либо хитростей в отношении запроса rand () сгенерирует одно случайное число в начале выполнения запроса и использует его для каждой строки. Он не будет генерировать другое случайное число для каждой строки. В простом запросе выполнение простого «ORDER BY rand ()» не будет случайным образом упорядочивать результаты вообще.

Так что в этом случае newid () намного лучше, даже если не более эффективен.

0 голосов
/ 07 июня 2009

В соответствии с оценочным планом SQL Server сортировка с помощью NewId () занимает больше времени, чем Rand (). Я думаю, что генерация числа rand () основана на факторе времени, и если вы хотите отсортировать записи запроса с помощью Rand (), ваши записи получат тот же номер ранда, и результат будет таким же, как и в предыдущем. например, см. следующее

Select *,rand() as rnd from dbo.Products Order by rnd  

Все записи будут иметь одно и то же значение, поскольку случайный коэффициент генерации не изменяется при выборе записи.

0 голосов
/ 07 июня 2009

NEWID () генерирует GUID, который сохраняется в типе столбца uniqueidentifier . RAND () - это просто псевдослучайное число (int, smallint или tinyint). Это действительно меньше об эффективности и больше о ваших потребностях. RAND () не гарантируется быть уникальным, NEWID () является.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...