Sql 为什么在视图中添加行数会花费太多时间来执行?
如果我在视图中使用NewID,则需要1毫秒Sql 为什么在视图中添加行数会花费太多时间来执行?,sql,sql-server,tsql,Sql,Sql Server,Tsql,如果我在视图中使用NewID,则需要1毫秒 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' 但如果我用排号,完成的时间会太长 ALTER VIEW [dbo].[d] AS SELECT Row_number()OVER(
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'
但如果我用排号,完成的时间会太长
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'
我认为,NEWID()
总是创建任意随机数作为ID(不需要任何计算),但是在ROW\u number()
SQL的情况下,需要对列进行排序,然后提供ID。由于
ROW\u NUMBER()
比NEWID()
更复杂,SQL server需要更多的时间来处理它。ROW\u NUMBER()
将有额外的结果排序成本,但NEWID()
没有此成本如果您查看执行计划,您可以看到相同的内容: 单击工具栏上的
Display Estimated Execution Plan
图标SSMS
见下图
使用NEWID()或ROW_NUMBER()有不同的要求 例如,For是必需的。 与Row_Number()一样,NewID()函数也将为每个数据行提供唯一值的方法,但不会帮助您提供SQL分页
每次执行查询时,NewID()为同一行返回不同的数据。除非数据没有改变,否则我认为行号()的相同程度要小得多,因为
的顺序是按
。那个专栏有封面索引吗?@Raj那么解决办法是什么。检查答案。每个人都给了你完美的答案。如果需要使用ROW\u NUMBER()
,则在ORDER BY
中使用的列上创建索引将有所帮助,但无法与使用NEWID()的速度相匹配