2016-07-25 17 views
5

MS SQL Server'da ROW_NUMBER kullanılarak IDENTITY kullanılarak bir ORDER BY ifadesi arasında herhangi bir fark (sonuç kümesi, performans veya anlam anlam açısından) var mı? Örneğin, bir sütunda "ad" ile bir tabloda verilmiştirROW_NUMBER vs IDENTITY ve ORDER BY

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

ve

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

Her iki seçeneğin yürütme planlarına bir göz atın. Bu size performans için oldukça iyi bir gösterge verebilir. Çok fazla farklılık olacağını sanmıyorum. –

+0

@scsimon – JamieD77

+0

@scsimon ile ilgili% 100 emin değilsiniz, ikinci sorguda bir sipariş vardır, böylece çıkış aynı olacaktır. Ve tanım gereği bir tablonun düzeni yoktur. –

cevap

3

anlamsal arasındaki fark, farklı olmasıdır. İlk örnek, sıralı bir değere sahip bir tamsayı sütunu oluşturur. İkinci örnek, identity() kullanarak kimlik sütunu oluşturur. Bu, sonraki insertlerin artacağı anlamına gelir. firstname ihtiyaçları sıralanmasını çünkü

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

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

select * 
from #t; 

işleme gelince, iki esasen sizin durumunuzda aynı olmalıdır:

Örneğin, bu kodu çalıştırın. Satırlar daha geniş olsaydı, row_number() sürümünün performansta diğerini kırpması durumunda şaşırmazdım. row_number() ile sadece bir sütun sıralanır ve daha sonra orijinal verilere tekrar eşlenir. identity() ile, tüm satırın sıralanması gerekir. Performanstaki bu farklılık sadece spekülasyondan haberdardır.