gpt4 book ai didi

sql-server-2005 - 为什么将 WHERE 子句放在 View 之外的性能很差

转载 作者:行者123 更新时间:2023-12-03 14:50:47 24 4
gpt4 key购买 nike

假设您有一个观点:

CREATE VIEW dbo.v_SomeJoinedTables AS
SELECT
a.date,
a.Col1,
b.Col2,
DENSE_RANK()
OVER(PARTITION BY a.date, a.Col2 ORDER BY a.Col3) as Something
FROM a JOIN b on a.date = b.date

我发现性能:
SELECT *
FROM v_SomeJoinedTables
WHERE date > '2011-01-01'


SELECT *, 
DENSE_RANK()
OVER(PARTITION BY a.date, a.Col2 ORDER BY a.Col3) as Something
FROM a JOIN b ON a.date = b.date
WHERE a.date > '2011-01-01'

我很惊讶这两个语句的查询计划不一样。

我也尝试过使用内联表值函数,但查询仍然比我复制和粘贴 View 逻辑的代码长 100-1000 倍。

有任何想法吗?

最佳答案

它被称为“Predicate pushing”,也就是延迟过滤。

SQL Server 并不总是意识到可以“更早”地在 View 内有效地应用 WHERE。

它已在 SQL Server 2008 中得到缓解,以按预期工作更多

关于sql-server-2005 - 为什么将 WHERE 子句放在 View 之外的性能很差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6653979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com