2010-09-02 6 views
1

Supposons que je la requête suivante:Optimisation des requêtes Question

Update LPMBonusReport Set BoxID = (Select ContainerSerialNumber 
     From Wip.vwWorkItem Where SerialNumber = LPMBonusReport.SubID) 

L'objet Wip.vwWorkItem est une vue.

Supposons qu'il existe 100 lignes dans la table LPMBonusReport. La vue serait-elle matérialisée 100 fois, une fois par ligne dans LPMBonusReport, ou serait-elle matérialisée juste une fois?

Merci.

Répondre

3

L'optimiseur créerait un plan d'exécution (unique) basé sur LPMBonsReport et les tables comprenant la vue. Exécuter et examiner votre requête dans une fenêtre de requête SSMS avec « Inclure plan d'exécution réel » sur

2

Je préfère éliminer la sous-requête et voir ce écrit (c'est une option dans le menu « Requête ».):

Update BR 
    Set BoxID = WI.ContainerSerialNumber 
    from LPMBonusReport BR 
     inner join Wip.vwWorkItem WI 
      on BR.SubID = WI.SerialNumber 
+0

Vous avez raison. C'est une meilleure approche. J'ai besoin de vérifier le plan d'exécution, mais cela semble fonctionner beaucoup mieux aussi. –

+0

@randy. Est-ce que cela a fonctionné pour vous? Si oui, veuillez marquer comme accepté. Merci. –

+0

J'ai aimé votre suggestion, mais elle n'a pas répondu à ma question. Ma question traitait de la manière dont l'optimiseur de requêtes gérerait la matérialisation de la vue, compte tenu de ma requête initiale. –

Questions connexes