bpe*_*kes 16 t-sql sql-server-2005 where-clause sql-execution-plan
假设您有一个观点:
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
Run Code Online (Sandbox Code Playgroud)
我发现了以下的表现:
SELECT *
FROM v_SomeJoinedTables
WHERE date > '2011-01-01'
Run Code Online (Sandbox Code Playgroud)
比...差很多
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'
Run Code Online (Sandbox Code Playgroud)
我很惊讶这两个语句的查询计划不一样.
我也尝试使用内联表值函数,但查询仍然比我复制和粘贴视图逻辑的代码长100-1000倍.
有任何想法吗?
gbn*_*gbn 16
它被称为" Predicate推 ",也称为延迟过滤.
SQL Server并不总是能够有效地在视图内部"更早地"实现WHERE.
它在SQL Server 2008中得到了缓解,可以按预期工作
| 归档时间: |
|
| 查看次数: |
8162 次 |
| 最近记录: |