New_Id()& Rand()SQLSERVER2005

时间:2009-06-07 10:25:24

标签: sql-server-2005

newid()函数如何在后台工作?

rand()和newid()有什么区别?

哪个更有效?

提前致谢。

5 个答案:

答案 0 :(得分:4)

rand的问题在于它为调用的所有行返回相同的值。 newid对于每一行都会有所不同。这篇文章清楚地解释了

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

答案 1 :(得分:2)

“哪个更有效率?”为了什么?

背景是什么?你想做什么?

RAND()返回从0到1的伪随机浮点值,不包括。

NEWID()创建uniqueidentifier类型的唯一值。

答案 2 :(得分:1)

newid()实际上并不生成随机数,它会生成GUID,它们随机有一部分,并且可以很好地用于随机排序。

就哪个更有效而言,当排序是一个因素时,它实际上是一个更大的随机问题。默认情况下,如果没有关于查询的一些技巧,rand()将在查询执行开始时生成一个随机数,并将其用于每一行。它不会为每一行生成不同的随机数。在一个简单的查询中,执行一个简单的“ORDER BY rand()”将不会随机对结果进行排序。

所以在这种情况下,newid()要好得多,即使效率不高。

答案 3 :(得分:0)

NEWID()生成一个存储在 uniqueidentifier 列类型中的GUID。 RAND()只是一个伪随机数(int,smallint或tinyint)。它实际上不是关于效率,而是关于您的需求。 RAND()不保证是唯一的,NEWID()是。

答案 4 :(得分:0)

根据SQL Server估计计划,使用NewId()进行排序比使用Rand()更耗时。我认为rand()数字的生成是基于时间因素的。如果你想用Rand()对查询记录进行排序,你的记录将得到相同的rand数,结果将与之前相同。例如,请参阅以下

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

所有记录都具有相同的rnd值,因为在记录选择期间随机生成因子不会改变。