Comment puis-je améliorer les performances de la requête ci-dessous? Cela prend actuellement 35 minutes.Requête SQL en 35 minutes
-- Select
SELECT
RPT_FT_MD_FLOWS.FECDATA, RPT_FT_MC_CONTR.L2V,
RPT_FT_MD_FLOWS.CODCONT, SUM(RPT_FT_MD_FLOWS.IMPMOCMP)
FROM
RPT_FT_MD_FLOWS,
RPT_FT_MC_CONTR
WHERE
-- joins
RPT_FT_MD_FLOWS.IDGRUEMP = RPT_FT_MC_CONTR.IDGRUEMP AND
RPT_FT_MD_FLOWS.FECDATA = RPT_FT_MC_CONTR.FECDATA AND
RPT_FT_MD_FLOWS.CODCONT = RPT_FT_MC_CONTR.CODCONT AND
RPT_FT_MD_FLOWS.IDEMPR = RPT_FT_MC_CONTR.IDEMPR AND
RPT_FT_MD_FLOWS.IDCENT = RPT_FT_MC_CONTR.IDCENT AND
RPT_FT_MD_FLOWS.CODPROD = RPT_FT_MC_CONTR.CODPROD AND
RPT_FT_MD_FLOWS.IDCONTR = RPT_FT_MC_CONTR.IDCONTR AND
RPT_FT_MD_FLOWS.IDSCONTR = RPT_FT_MC_CONTR.IDSCONTR AND
-- filters
RPT_FT_MD_FLOWS.FECDATA = '31-May-2014' AND
RPT_FT_MD_FLOWS.IDGRUEMP = '0022' AND
RPT_FT_MD_FLOWS.ACUMTEMP = 'MTH' AND
RPT_FT_MD_FLOWS.IDESCENA = '01' AND
RPT_FT_MD_FLOWS.CODCONT='CCPP'
--group by
GROUP BY
RPT_FT_MD_FLOWS.FECDATA,
RPT_FT_MC_CONTR.L2V,
RPT_FT_MD_FLOWS.CODCONT
RPT_FT_MC_CONTR
: 39 millions de lignesRPT_FT_MD_FLOWS
: 145 millions de lignes
Voici le résultat de la commande expliquer:
Expliquer Commande
Execution Plan
----------------------------------------------------------
Plan hash value: 2459895390
------------------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | TQ |IN-OUT| PQ Distrib |
------------------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 268 | 29212 | 30846 (8)| 00:09:16 | | | | | |
| 1 | PX COORDINATOR | | | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10002 | 268 | 29212 | 30846 (8)| 00:09:16 | | | Q1,02 | P->S | QC (RAND) |
| 3 | HASH GROUP BY | | 268 | 29212 | 30846 (8)| 00:09:16 | | | Q1,02 | PCWP | |
| 4 | PX RECEIVE | | 268 | 29212 | 30846 (8)| 00:09:16 | | | Q1,02 | PCWP | |
| 5 | PX SEND HASH | :TQ10001 | 268 | 29212 | 30846 (8)| 00:09:16 | | | Q1,01 | P->P | HASH |
| 6 | HASH GROUP BY | | 268 | 29212 | 30846 (8)| 00:09:16 | | | Q1,01 | PCWP | |
|* 7 | HASH JOIN | | 39M| 4127M| 30586 (7)| 00:09:11 | | | Q1,01 | PCWP | |
| 8 | PX BLOCK ITERATOR | | 39M| 1893M| 10659 (4)| 00:03:12 | 1 | 16 | Q1,01 | PCWC | |
|* 9 | TABLE ACCESS FULL | RPT_FT_MC_CONTR | 39M| 1893M| 10659 (4)| 00:03:12 | 833 | 848 | Q1,01 | PCWP | |
| 10 | PX RECEIVE | | 145M| 8184M| 19806 (9)| 00:05:57 | | | Q1,01 | PCWP | |
| 11 | PX SEND BROADCAST LOCAL| :TQ10000 | 145M| 8184M| 19806 (9)| 00:05:57 | | | Q1,00 | P->P | BCST LOCAL |
| 12 | PX BLOCK ITERATOR | | 145M| 8184M| 19806 (9)| 00:05:57 | 66 | 66 | Q1,00 | PCWC | |
|* 13 | TABLE ACCESS FULL | RPT_FT_MD_FLOWS | 145M| 8184M| 19806 (9)| 00:05:57 | 66 | 66 | Q1,00 | PCWP | |
------------------------------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
7 - access("RPT_FT_MD_FLOWS"."CODCONT"="RPT_FT_MC_CONTR"."CODCONT" AND "RPT_FT_MD_FLOWS"."FECDATA"="RPT_FT_MC_CONTR"."FECDATA" AND
"RPT_FT_MD_FLOWS"."IDGRUEMP"="RPT_FT_MC_CONTR"."IDGRUEMP" AND "RPT_FT_MD_FLOWS"."IDEMPR"="RPT_FT_MC_CONTR"."IDEMPR" AND
"RPT_FT_MD_FLOWS"."IDCENT"="RPT_FT_MC_CONTR"."IDCENT" AND "RPT_FT_MD_FLOWS"."CODPROD"="RPT_FT_MC_CONTR"."CODPROD" AND
"RPT_FT_MD_FLOWS"."IDCONTR"="RPT_FT_MC_CONTR"."IDCONTR" AND "RPT_FT_MD_FLOWS"."IDSCONTR"="RPT_FT_MC_CONTR"."IDSCONTR")
9 - filter("RPT_FT_MC_CONTR"."IDGRUEMP"='0022' AND "RPT_FT_MC_CONTR"."FECDATA"=TO_DATE(' 2014-05-31 00:00:00', 'syyyy-mm-dd
hh24:mi:ss'))
13 - filter("RPT_FT_MD_FLOWS"."IDESCENA"='01' AND "RPT_FT_MD_FLOWS"."FECDATA"=TO_DATE(' 2014-05-31 00:00:00', 'syyyy-mm-dd
hh24:mi:ss') AND "RPT_FT_MD_FLOWS"."IDGRUEMP"='0022' AND "RPT_FT_MD_FLOWS"."ACUMTEMP"='MTH')
Merci Chris pour l'édition, il semble maintenant clair – nkalis
Votre syntaxe de jointure est [antique] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using -old-style-joins.aspx) et vous ** NEED ** pour le réparer. – Zane
Pourquoi avez-vous besoin de joindre 2 tables sur autant de critères? – Zane