confronto delle prestazioni di croce SQL Server si unisce con condizionali nella dichiarazione in cui e interno si unisce con condizionali nel join di dichiarazione su
-
12-09-2019 - |
Domanda
Sto cercando di determinare le prestazioni di un pezzo di SQL generato che viene eseguito in SQL Server 2005.
Si utilizza cross join, ma i condizionali che legano la croce è unito tabelle sono nella dichiarazione dove.
Ho già pensato che tutto croce join che hanno in cui dichiarazioni sarebbero prima tirare il prodotto cartesiano completo e quindi applicare il filtro.
Tuttavia, questa seguente link sul MSDN suggerisce in modo diverso.
https://msdn.microsoft.com/en-us/library /ms190690.aspx
Si afferma esplicitamente che se c'è un condizionale su un tavolo croce unito, sarà "comportarsi" come un inner join. Si va avanti per mostrare un esempio dei risultati simili di un join interno ed un cross join w / dove condizionale.
E non precisa quali la differenza di prestazioni è, però, solo che si comportano in modo simile.
Soluzione
The example given is correct, atleast in a basic query.
La domanda sotto produrrà lo stesso piano di esecuzione e tempi di esecuzione per entrambe le query. Lo Sql Optimiser è in genere libero di muoversi restrizioni tra cui le clausole e 'su' clausole durante le operazioni di join, e immagino che lo stesso è per il cross si unisce.
select companies.id, contacts.id
from
companies
cross join contacts
where
contacts.companyid = companies.id
select companies.id, contacts.id
from
companies
inner join contacts on contacts.companyid = companies.id
Altri suggerimenti
Probabilmente la cosa più semplice da fare è quello di visualizzare il piano di esecuzione per la sua dichiarazione e dare un'occhiata a quello che sta facendo. Puoi farlo da Management Studio - c'è un po 'di informazioni qui:
http://www.sql-server-performance.com/tips /query_execution_plan_analysis_p1.aspx