Bonjour,
J'ai une base de données 10.2.0.4.0, j'ai actuellement une requête qui consomme beaucoup de cpu time, je voudrais l'optimiser:
voici ci-dessous la requête:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SELECT DISTINCT A.QUEUENAME
  FROM SYSADM.PSAPMSGPUBHDR A, SYSADM.PSQUEUEDEFN B
 WHERE PUBSTATUS in (1,2)
   AND A.QUEUENAME = B.QUEUENAME
   AND B.QUEUESTATUS <> 2;
ci-dessous le plan d'execution:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
-------------------------------------------------------------------------------------------
| Id  | Operation              | Name             | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |                  |       |       |   940 (100)|          |
|   1 |  HASH UNIQUE           |                  |     8 |   328 |   940   (7)| 00:00:12 |
|*  2 |   HASH JOIN            |                  |   672K|    26M|   899   (2)| 00:00:11 |
|*  3 |    TABLE ACCESS FULL   | PSQUEUEDEFN      |    73 |  1387 |     5   (0)| 00:00:01 |
|*  4 |    INDEX FAST FULL SCAN| PSDPSAPMSGPUBHDR |   672K|    14M|   889   (2)| 00:00:11 |
-------------------------------------------------------------------------------------------
 
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
 
   1 - SEL$1
   3 - SEL$1 / B@SEL$1
   4 - SEL$1 / A@SEL$1
 
Outline Data
-------------
 
  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('10.2.0.4')
      OPT_PARAM('_optimizer_cost_based_transformation' 'off')
      OUTLINE_LEAF(@"SEL$1")
      FULL(@"SEL$1" "B"@"SEL$1")
      INDEX_FFS(@"SEL$1" "A"@"SEL$1" ("PSAPMSGPUBHDR"."PUBSTATUS"
              "PSAPMSGPUBHDR"."QUEUENAME"))
      LEADING(@"SEL$1" "B"@"SEL$1" "A"@"SEL$1")
      USE_HASH(@"SEL$1" "A"@"SEL$1")
      END_OUTLINE_DATA
  */
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - access("A"."QUEUENAME"="B"."QUEUENAME")
   3 - filter("B"."QUEUESTATUS"<>2)
   4 - filter(("PUBSTATUS"=1 OR "PUBSTATUS"=2))
 
Column Projection Information (identified by operation id):
-----------------------------------------------------------
 
   1 - "A"."QUEUENAME"[VARCHAR2,120]
   2 - (#keys=1) "A"."QUEUENAME"[VARCHAR2,120]
   3 - "B"."QUEUENAME"[VARCHAR2,120]
   4 - "A"."QUEUENAME"[VARCHAR2,120]
ci-dessous le nombre de ligne de chaque table , les index etc ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS LAST_ANA
------------------------------ ---------- ---------- ------------ --------
PSAPMSGPUBHDR                      672909      20307            0 09/11/10
 
 
 
 
 
INDEX_NAME      TABLE_NAME      COLUMN_NAME     COLUMN_POSITION
--------------- --------------- --------------- ---------------
PS_PSQUEUEDEFN  PSQUEUEDEFN     QUEUENAME                     1
 
INDEX_NAME           TABLE_NAME      COLUMN_NAME          COLUMN_POSITION
-------------------- --------------- -------------------- ---------------
PS_PSAPMSGPUBHDR     PSAPMSGPUBHDR   IBTRANSACTIONID                    1
PSAPSAPMSGPUBHDR     PSAPMSGPUBHDR   QUEUENAME                          1
PSBPSAPMSGPUBHDR     PSAPMSGPUBHDR   LASTUPDDTTM                        1
PSDPSAPMSGPUBHDR     PSAPMSGPUBHDR   PUBSTATUS                          1
PSCPSAPMSGPUBHDR     PSAPMSGPUBHDR   PUBSTATUS                          1
PSDPSAPMSGPUBHDR     PSAPMSGPUBHDR   QUEUENAME                          2
PSCPSAPMSGPUBHDR     PSAPMSGPUBHDR   PUBLISHTIMESTAMP                   2
Quelqu'un peut me donner des idées sur ce qui ne va pas ou comment puis-je le réécrire ?

Merci.