SQL Server 2008. J'ai cette très grande requête qui a un coût élevé associé. TOAD a une fonctionnalité optimisation de la requête en elle et la seule modification apportée est la suivante:Optimisation de requête. Pourquoi TOAD a-t-il fait cela?
Avant:
LEFT OUTER JOIN (SELECT RIN_EXT.rejected,
RIN_EXT.scar,
RIN.fcreceiver,
RIN.fcitemno
FROM RCINSP_EXT RIN_EXT
INNER JOIN dbo.rcinsp RIN
ON RIN_EXT.fkey_id = RIN.identity_column) RIN1
ON RCI.freceiver = RIN1.fcreceiver
AND RCI.fitemno = RIN1.fcitemno
WHERE RED.[YEAR] = '2009'
Après:
LEFT OUTER JOIN (SELECT RIN_EXT.rejected,
RIN_EXT.scar,
RIN.fcreceiver,
RIN.fcitemno
FROM dbo.rcinsp RIN
INNER JOIN RCINSP_EXT RIN_EXT
ON RIN.identity_column = COALESCE (RIN_EXT.fkey_id , RIN_EXT.fkey_id)) RIN1
ON RCI.freceiver = RIN1.fcreceiver
AND RCI.fitemno >= RIN1.fcitemno -- ***** RIGHT HERE
AND RCI.fitemno <= RIN1.fcitemno
WHERE RED.[YEAR] = '2009'
Le champ est un champ char (3), ce qui est SQL Server 2008.
N'importe quelle idée pourquoi la leur est tellement plus rapide que le mien?
Si vous remarquez, ils ont fait FROM RIN et INNER JOIN RIN_EXT, alors que vous avez fait FROM RIN_EXT et INNER JOIN RIN. Vous ne savez pas si vous avez manqué d'autres différences, vous ne savez pas si vous avez fait des mesures en supprimant la ligne que vous avez commentée et cette ligne particulière est à l'origine de l'amélioration des performances. – JustLoren
La meilleure option consiste à comparer les plans de requête pour les 2 requêtes et voir quels opérateurs ils utilisent. –
Je suis désolé, j'ai réalisé que le premier script manquait le reste des critères de jointure. – DavidStein