如果我在View中使用NewID,则需要1 ms,
ALTER VIEW [dbo].[d]
AS
SELECT
NEWID() AS Id,
p.XX
,p.xx
FROM [view_XXX] as P
GO
select * .view_d where code='xxxx'
但是如果我使用ROW_NUMBER则需要太多时间才能完成,
ALTER VIEW [dbo].[d]
AS
SELECT
Row_number()OVER(ORDER BY T.XXXXXX) AS Id,
p.XX
,p.xx
FROM [view_XXX] as P
GO
select * .view_d where code='xxxx'
答案 0 :(得分:5)
我认为,NEWID()
总是创建任意随机数作为ID(不需要任何计算)但是如果ROW_NUMBER()
SQL需要对列进行排序,则提供ID。
<登记/>
由于ROW_NUMBER()
比NEWID()
更复杂,SQL服务器需要更多时间来处理它。
答案 1 :(得分:1)
ROW_NUMBER()
会产生额外的结果排序费用,但NEWID()
不会产生此费用
如果查看执行计划,您可以看到相同的内容:
点击工具栏
上的Display Estimated Execution Plan
SSMS
图标
见下面的图片。
答案 2 :(得分:0)
使用NEWID()或ROW_NUMBER()
背后有不同的要求例如,需要paging in SQL Row_Number()。 就像Row_Number()一样,NewID()函数也会为每个数据行提供唯一值的方法,但不会帮助您提供SQL分页,例如
每次执行查询时,NewID()都会返回同一行的不同数据。除非数据没有改变,否则Row_Number()更不一样