Optimisation de requete car des full access table
Bonjour à tous
tout d'abord voici la requete incriminé :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| SELECT *
FROM (
SELECT VALEUR.ID_VALEUR, REF1.LIBELLE AS L1, REF2.LIBELLE AS L2, REF3.LIBELLE AS L3, PRODUIT.LIBELLE AS L4, PRODUIT.IDENTIFIANT_PRODUIT, VALEUR.VALEUR,
TO_CHAR(VALEUR.DATE_VALEUR,'YYYYMMDDHH24MISS'), VALEUR.LST_STATUT, TO_CHAR(VALEUR.DATE_DEBUT_STATUT,'YYYYMMDDHH24MISS'),
PRODUIT.ID_PRODUIT,VALEUR.REF_CREATEUR, VALEUR.LST_FLAG_VIVANT,
row_number() over (order by VALEUR.ID_VALEUR) as ligne
FROM VALEUR, PRODUIT, CATALOGUE.REFERENTIEL REF1, CATALOGUE.REFERENTIEL REF2, CATALOGUE.REFERENTIEL REF3
WHERE VALEUR.DATE_FIN_STATUT IS NULL
AND VALEUR.ID_PRODUIT = PRODUIT.ID_PRODUIT
AND PRODUIT.REF_SOURCE=REF1.ID_REF
AND PRODUIT.REF_UNITE=REF2.ID_REF
AND PRODUIT.REF_DIFFUSEUR=REF3.ID_REF
AND VALEUR.ID_VALEUR>'44948237' AND PRODUIT.ID_PRODUIT IN(
SELECT PRODUIT.ID_PRODUIT
FROM PRODUIT, CATALOGUE.REFERENTIEL REF1,
ISEDOM.PLUGIN_PERIMETRE_REPLICATION PREP
WHERE PRODUIT.REF_SOURCE=REF1.ID_REF
AND REF1.LIBELLE = PREP.SOURCE
AND PREP.APPLICATION='PLUGIN'
AND PRODUIT.IDENTIFIANT_PRODUIT LIKE PREP.PRODUIT
)
)
WHERE ligne<=1000; |
secondo, voici le plan d'exécution que j'obtiens pour cette requete :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| ---------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost | Pstart| Pstop |
---------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 21494 | 6192K| 11805 | | |
| 1 | VIEW | | 21494 | 6192K| 11805 | | |
| 2 | WINDOW SORT PUSHED RANK | | 21494 | 3463K| 11805 | | |
| 3 | HASH JOIN | | 21494 | 3463K| 11019 | | |
| 4 | TABLE ACCESS FULL | REFERENTIEL | 263 | 3156 | 3 | | |
| 5 | HASH JOIN | | 21284 | 3180K| 11015 | | |
| 6 | TABLE ACCESS FULL | REFERENTIEL | 263 | 3156 | 3 | | |
| 7 | HASH JOIN | | 21284 | 2930K| 11011 | | |
| 8 | TABLE ACCESS FULL | REFERENTIEL | 263 | 3156 | 3 | | |
| 9 | HASH JOIN SEMI | | 22186 | 2794K| 11008 | | |
| 10 | HASH JOIN | | 22514 | 2550K| 5868 | | |
| 11 | PARTITION HASH ALL | | 22514 | 901K| 5102 | 1 | 10 |
| 12 | TABLE ACCESS BY GLOBAL INDEX ROWID| VALEUR | 22514 | 901K| 5102 | ROWID | ROWID |
| 13 | INDEX RANGE SCAN | PK_VALEUR | 33532 | | 96 | 1 | 10 |
| 14 | TABLE ACCESS FULL | SERIE | 89621 | 6564K| 336 | | |
| 15 | VIEW | VW_NSO_1 | 2986K| 37M| 1401 | | |
| 16 | HASH JOIN | | 2986K| 182M| 1401 | | |
| 17 | TABLE ACCESS FULL | PLUGIN_PERIMETRE_REPLICATION | 53197 | 1454K| 71 | | |
| 18 | HASH JOIN | | 90508 | 3181K| 340 | | |
| 19 | TABLE ACCESS FULL | REFERENTIEL | 263 | 3156 | 3 | | |
| 20 | TABLE ACCESS FULL | SERIE | 89621 | 2100K| 335 | | |
--------------------------------------------------------------------------------------------------------------------------- |
Lorsque j'exécute cette requête, elle met environ 13 minute.
Sur une autre base , elle à peine 13 secondes
Sauriez vous m'aider à voir d ou vient le probléme ou du moins une piste pour analyser le probleme
Merci