FROM deleted d JOIN inserted i
ON d.fra_tie_c_sap = i.fra_tie_c_sap
AND d.fra_c_aa = i.fra_c_aa
AND d.fra_art_c = i.fra_art_c
AND d.fra_ctr_suf = i.fra_ctr_suf
AND d.fra_cde_suf = i.fra_cde_suf
AND d.fra_es_suf = i.fra_es_suf
AND d.fra_tie_c_pai = i.fra_tie_c_pai
AND d.fra_dev_c = i.fra_dev_c
AND d.fra_rub_c = i.fra_rub_c
WHERE frm_aa = DatePart (yy, i.fra_d_val)
AND frm_mm = DatePart (mm, i.fra_d_val)
AND frm_tie_c_sap = i.fra_tie_c_sap
AND frm_c_aa = i.fra_c_aa
AND frm_art_c = i.fra_art_c
AND frm_ctr_suf = i.fra_ctr_suf
AND frm_cde_suf = i.fra_cde_suf
AND frm_es_suf = i.fra_es_suf
AND frm_tie_c_pai = i.fra_tie_c_pai
AND frm_dev_c = i.fra_dev_c
AND frm_rub_c = i.fra_rub_c
Le problème est que j'obtiens des performances bcp moins intéressante en
Compatibilité 2000 qu' en compatibilité 6.5. Le plan d'exécution est
différent :
dans le cas 2000 il parcourt l'index PK_FRAIS_MOIS en entier et réalise un
Hash Match avec deleted (très couteux !), alors qu'en 6.5 il cherche
directement
les lignes inserted dans la table FRAIS_MOIS en utilisant l'index !! D'un
côté j'ai le résultat en 6-7 sec, et de l'autre en moins d'une seconde !!
FROM deleted d JOIN inserted i ON d.fra_tie_c_sap = i.fra_tie_c_sap AND d.fra_c_aa = i.fra_c_aa AND d.fra_art_c = i.fra_art_c AND d.fra_ctr_suf = i.fra_ctr_suf AND d.fra_cde_suf = i.fra_cde_suf AND d.fra_es_suf = i.fra_es_suf AND d.fra_tie_c_pai = i.fra_tie_c_pai AND d.fra_dev_c = i.fra_dev_c AND d.fra_rub_c = i.fra_rub_c
WHERE frm_aa = DatePart (yy, i.fra_d_val) AND frm_mm = DatePart (mm, i.fra_d_val) AND frm_tie_c_sap = i.fra_tie_c_sap AND frm_c_aa = i.fra_c_aa AND frm_art_c = i.fra_art_c AND frm_ctr_suf = i.fra_ctr_suf AND frm_cde_suf = i.fra_cde_suf AND frm_es_suf = i.fra_es_suf AND frm_tie_c_pai = i.fra_tie_c_pai AND frm_dev_c = i.fra_dev_c AND frm_rub_c = i.fra_rub_c
Le problème est que j'obtiens des performances bcp moins intéressante en Compatibilité 2000 qu' en compatibilité 6.5. Le plan d'exécution est différent : dans le cas 2000 il parcourt l'index PK_FRAIS_MOIS en entier et réalise un Hash Match avec deleted (très couteux !), alors qu'en 6.5 il cherche directement les lignes inserted dans la table FRAIS_MOIS en utilisant l'index !! D'un côté j'ai le résultat en 6-7 sec, et de l'autre en moins d'une seconde !!
Conseils ??
Laurent
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
je comprend absolument pas pourquoi tu utilise deleted combiné à inserted !
peut tu poster le code tout entier de ce trigger ???
A +
Laurent RUHLMANN a écrit:
Bonjour,
Je fais un update sur une table FRAIS qui déclenche un trigger dans le quel
se trouve la requête suivante :
FROM deleted d JOIN inserted i
ON d.fra_tie_c_sap = i.fra_tie_c_sap
AND d.fra_c_aa = i.fra_c_aa
AND d.fra_art_c = i.fra_art_c
AND d.fra_ctr_suf = i.fra_ctr_suf
AND d.fra_cde_suf = i.fra_cde_suf
AND d.fra_es_suf = i.fra_es_suf
AND d.fra_tie_c_pai = i.fra_tie_c_pai
AND d.fra_dev_c = i.fra_dev_c
AND d.fra_rub_c = i.fra_rub_c
WHERE frm_aa = DatePart (yy, i.fra_d_val)
AND frm_mm = DatePart (mm, i.fra_d_val)
AND frm_tie_c_sap = i.fra_tie_c_sap
AND frm_c_aa = i.fra_c_aa
AND frm_art_c = i.fra_art_c
AND frm_ctr_suf = i.fra_ctr_suf
AND frm_cde_suf = i.fra_cde_suf
AND frm_es_suf = i.fra_es_suf
AND frm_tie_c_pai = i.fra_tie_c_pai
AND frm_dev_c = i.fra_dev_c
AND frm_rub_c = i.fra_rub_c
Le problème est que j'obtiens des performances bcp moins intéressante en
Compatibilité 2000 qu' en compatibilité 6.5. Le plan d'exécution est
différent :
dans le cas 2000 il parcourt l'index PK_FRAIS_MOIS en entier et réalise un
Hash Match avec deleted (très couteux !), alors qu'en 6.5 il cherche
directement
les lignes inserted dans la table FRAIS_MOIS en utilisant l'index !! D'un
côté j'ai le résultat en 6-7 sec, et de l'autre en moins d'une seconde !!
Conseils ??
Laurent
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
FROM deleted d JOIN inserted i ON d.fra_tie_c_sap = i.fra_tie_c_sap AND d.fra_c_aa = i.fra_c_aa AND d.fra_art_c = i.fra_art_c AND d.fra_ctr_suf = i.fra_ctr_suf AND d.fra_cde_suf = i.fra_cde_suf AND d.fra_es_suf = i.fra_es_suf AND d.fra_tie_c_pai = i.fra_tie_c_pai AND d.fra_dev_c = i.fra_dev_c AND d.fra_rub_c = i.fra_rub_c
WHERE frm_aa = DatePart (yy, i.fra_d_val) AND frm_mm = DatePart (mm, i.fra_d_val) AND frm_tie_c_sap = i.fra_tie_c_sap AND frm_c_aa = i.fra_c_aa AND frm_art_c = i.fra_art_c AND frm_ctr_suf = i.fra_ctr_suf AND frm_cde_suf = i.fra_cde_suf AND frm_es_suf = i.fra_es_suf AND frm_tie_c_pai = i.fra_tie_c_pai AND frm_dev_c = i.fra_dev_c AND frm_rub_c = i.fra_rub_c
Le problème est que j'obtiens des performances bcp moins intéressante en Compatibilité 2000 qu' en compatibilité 6.5. Le plan d'exécution est différent : dans le cas 2000 il parcourt l'index PK_FRAIS_MOIS en entier et réalise un Hash Match avec deleted (très couteux !), alors qu'en 6.5 il cherche directement les lignes inserted dans la table FRAIS_MOIS en utilisant l'index !! D'un côté j'ai le résultat en 6-7 sec, et de l'autre en moins d'une seconde !!
Conseils ??
Laurent
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************