2016-03-08 2 views
0

J'ai suivant sql. Celui-ci fonctionne bien mais prend beaucoup de temps en raison du fait que les fichiers ar et py contiennent tous deux un très grand nombre d'enregistrements. Y at-il un moyen de limiter la jointure aux documents de la partie du sql? Alors joignez-vous que le Articlenumeró (ararnr) 1002032, 1904140 etc ...limite de limite de jointure avec une portée

SELECT ararnr,ararir,pyarnr,pypykd,pyarpy 
FROM ar left join 
    py 
    on ar.ararnr = py.pyarnr and pypykd ='C' and 
     ararnr in '1002032','1904140', etc.. 
ORDER BY case when ararnr='1002032' then 1 ararnr ='1904140' then 2 etc... end"; 

D'ailleurs j'utilise DB2 pour I série sql

+0

Modifiez votre question et fournissez des noms de colonne qualifiés afin que les lecteurs sachent d'où proviennent les colonnes. –

+0

créer l'index non-cluster sur les colonnes que vous utilisez en condition ON et inclure les colonnes de liste de sélection dans INCLUS de l'index non-cluster –

Répondre

1

Votre requête n'a pas de sens, parce que vous avez left join avec des conditions sur la première table dans la clause on. Je suppose que vous avez l'intention:

SELECT ararnr, ararir, pyarnr, pypykd, pyarpy 
FROM ar left join 
    py 
    on ar.ararnr = py.pyarnr and py.pypykd ='C' 
WHERE ar.ararnr in ('1002032', '1904140', . . .) 
ORDER BY case when ararnr='1002032' then 1 ararnr ='1904140' then 2 etc... end"; 

Pour cette requête, vous voulez des indices sur ar(ararnr) et py(ararnr, pypkd). Cela pourrait améliorer les performances.