SQL Server propaga WHERE condições em modos de exibição complexo
Eu segui esta pergunta com um exemplo completo, caso não esteja claro o que quero dizer com el
Fiz uma visão que une dados de cerca de cinco tabelas. As tabelas possuem grandes quantidades de dados e as consultas demoram a ser executadas. Minha pergunta é que se eu fizer:
SELECT * FROM myView WHERE PersonID = 1000
SQL Server 'sabe o que quero dizer' e propaga automaticamente essa condição para as associações subjacentes na exibição? Para que não corra paratodo o mund, mas minimiza o conjunto de resultados nos estágios certos. Ou será executado para tudo, então faça oWHERE ID = 1000
no conjunto completo de resultados?
UM EXEMPL
Para simplificar (... espero) o que quero dizer, aqui está um exemplo de cenário pseudo-TSQL:
TABLE People (
ID,
Surname,
DOB
)
TABLE Activities (
ID,
TypeID,
LocationID,
Date
)
TABLE PersonActivityInvolvements (
ID,
PersonID,
ActivityID
)
TABLE ActivityTypes (
ID,
Name
)
TABLE Locations (
ID,
Street,
City
)
Então, eu quero uma visão que me mostre tudoPeople
, qualquerActivities
eles estavam envolvidos, oActivityType
, e aLocation
aconteceu. Embora essa configuração não seja drasticamente complicada, é possível que demore muito tempo para ser executado, se houver dezenas de milhares de cada entidad
A visualização pode ser algo como isto:
SELECT
*
FROM
People LEFT OUTER JOIN PersonActivityInvolvement PA
ON People.ID = PA.ID
INNER JOIN Activity
ON PA.ID = Activity.ID
INNER JOIN ActivityTypes AT
ON A.TypeID = AT.ID
INNER JOIN Locations
ON A.LocationID = Locations.ID
Então, se fosse fazer
SELECT * FROM myView WHERE DOB >= dateAdd(YEAR, -18, getDate())
a consulta dentro da visualização seria executada para todos ou o SQL Server saberia que deveria aplicá-la aoPeople.DOB
campo?