newid()函数如何在后台工作?
rand()和newid()有什么区别?
哪个更有效?
提前致谢。
答案 0 :(得分:4)
rand的问题在于它为调用的所有行返回相同的值。 newid对于每一行都会有所不同。这篇文章清楚地解释了
https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6089823.html#
答案 1 :(得分:2)
答案 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值,因为在记录选择期间随机生成因子不会改变。