Por que colocar uma cláusula WHERE fora da exibição tem um desempenho terrível
Digamos que você tenha uma visão:
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
Descobri que o desempenho de:
SELECT *
FROM v_SomeJoinedTables
WHERE date > '2011-01-01'
é muito pior que
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'
Estou muito surpreso que o plano de consulta para essas duas instruções não seja o mesm
Também tentei usar uma função com valor de tabela embutida, mas a consulta ainda leva 100-1000 vezes mais que o código em que copio e colo a lógica da visualizaçã
Alguma ideia