2009-06-07 4 views

答えて

4

randの問題は、呼び出しのすべての行に対して同じ値を返すことです。 newidはすべての行で異なるでしょう。この記事では))NEWID(でソートSQL Serverの推定計画によると、明らか

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

+2

newid()がMS Server上でhttp://en.wikipedia.org/wiki/Globally_Unique_Identifierをどのように動作させるかを説明するウィキメディアです。 – u07ch

2

"どちらが効率的ですか?"何のために?

コンテキストとは何ですか?あなたは何をしようとしているのですか?

RAND()は、0から1までの擬似ランダム浮動小数点値を返します。

NEWID()は、uniqueidentifierという一意の値を作成します。

0

NEWID()は、ユニーク識別子カラムタイプに格納されているGUIDを生成します。 RAND()は単に疑似乱数(int、smallint、またはtinyint)です。あなたのニーズが何であるかについては、それは効率性とより多くのことについて実際には少なくなります。 RAND()は一意であるとは保証されませんが、NEWID()は一意です。

1

newid()は実際には乱数を生成しませんが、ランダムな部分を持つGUIDを生成し、乱数の順序付けに役立ちます。

より効率的な点では、注文が要因である場合、その実際にはより大きな疑問がよりランダムになります。デフォルトでは、クエリに関するいくつかのトリッキーなことなしに、rand()はクエリの実行開始時に1つの乱数を生成し、それを各行に使用します。各行に異なる乱数を生成することはありません。単純なクエリでは、単純な "ORDER BY rand()"を実行しても、ランダムに結果を並べることはありません。

この場合、newid()は効率的でなくても、はるかに優れています。

0

物事を説明するランドよりも時間がかかる(です。私はrand()番号の生成は時間要素に基づいていると思います。Rand()でクエリのレコードをソートする場合、レコードは同じrand番号になり、結果は前と同じになります。

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

ランダム生成係数はレコード選択中に変更されないため、すべてのレコードは同じrnd値になります。