2016-07-25 11 views
5

MS SQL ServerでROW_NUMBERを使用しているときとIDENTITYをORDER BYステートメントで使用しているときに(結果セット、パフォーマンス、または意味の意味に関して)違いはありますか?例えば、カラム「姓」のテーブルを指定された意味論的意味が異なるROW_NUMBERとIDENTITYとORDER BY

SELECT FirstName, ROW_NUMBER() OVER (ORDER BY FirstName) AS Position 
INTO #MyTempTable 
FROM MyTable 

SELECT FirstName, IDENTITY(BIGINT) AS Position 
INTO #MyTempTable 
FROM MyTable 
ORDER BY FirstName 
+0

両方のオプションの実行計画を見てください。それはあなたにパフォーマンスのかなり良い指標を与えるでしょう。私はそこに大きな違いがあるとは思わない。 –

+0

@scsimonそのことについて100%は確信していません – JamieD77

+0

@scsimon 2番目のクエリは、出力が同じになるように順序があります。定義上、テーブルには順序がありません。 –

答えて

3

間の任意の差があります。最初の例は、連続した値を持つ整数列を作成します。

identity()を使用する2番目の例では、ID列が作成されます。これは、後続の挿入が増加することを意味します。例えば

、このコードを実行します:処理については

select 'a' as x, identity(int, 1, 1) as id 
into #t; 

insert into #t(x) values('b'); 

select * 
from #t; 

firstnameニーズをソートするため、二人は、あなたのケースでは、本質的に同じである必要があります。行の幅が広い場合は、row_number()のバージョンがパフォーマンスの面でもう片方を欠いていても驚かないでしょう。 row_number()では、1つの列のみがソートされ、元のデータにマッピングされます。 identity()では、行全体をソートする必要があります。このパフォーマンスの違いは、ちょうど情報に基づいた推測です。

関連する問題