在MS SQL Server中使用ROW_NUMBER和将IDENTITY与ORDER BY语句一起使用是否有任何区别(就结果集,性能或语义而言)?例如,给定一个具有“ FirstName”列的表,两者之间有什么区别
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
语义上是不同的。第一个示例创建一个具有顺序值的整数列。
第二个示例,使用identity()
创建一个标识列。这意味着后续插入将增加。
例如,运行以下代码:
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()
只有一列进行排序,然后被映射回原始数据。随着identity()
整个行需要进行排序。性能上的差异只是出于推测。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句