2015-11-10 4 views
0

J'ai une requête SQL pour mettre à jour les enregistrements. J'utilise la fonction 'EXISTS' mais c'est très lent. Maintenant, je veux changer ma requête avec des jointures.La requête Sql est lente (existe/jointures)

UPDATE zp 
SET ZP.TEST1=NULL, 
    ZP.TEST2=NULL, 
    ZP.TEST3=NULL, 
    ZP.TEST4=NULL, 
    ZP.TEST5=NULL, 
    ZP.TEST6=NULL, 
    ZP.TEST7=NULL, 
    ZP.TEST8=NULL, 
    ZP.TEST9=NULL, 
    ZP.TEST10=NULL, 
    ZP.TEST11=NULL, 
    ZP.TEST12=NULL, 
    ZP.TEST13=NULL, 
    ZP.TEST14=NULL, 
    ZP.TEST15=NULL 
from TestTable ZP 
WHERE NOT(
     (ZP.name='I' 
    AND 
     surname='S' 
    OR 
     addr='S' 
    AND 
     ClientID IS NOT NULL) 
    AND EXISTS(
     SELECT * FROM table2 P 
     WHERE P.OrgID=ZP.OrgID AND 
     P.CATEGORY='D' 
    ) 
) 
+3

http://stackoverflow.com/questions/1293330/how-can-i-do-an-update-statement-with-join-in-sql – StanislavL

+0

Amélioration de la mise en forme du code, et de la grammaire, également ajouté le code en ligne pour une meilleure lisibilité –

+0

Existe vraiment n'a pas l'air d'un problème ici. Avez-vous des index sur les colonnes auxquelles vous vous joignez? – jazza1000

Répondre

0

Une légère amélioration de l'efficacité serait ....

EXISTS(
     SELECT 1 FROM table2 P 
     WHERE P.OrgID=ZP.OrgID AND 
     P.CATEGORY='D' 

A savoir 1 plutôt que *.

Mais je suis sûr que ce n'est pas la solution complète.