Uma ferramenta que facilita a leitura do plano de execução

Execution plan order

Alguns aspectos na leitura do plano de execução não são tão simples e requerem um pouco de prática, um desses aspectos é determinar em que ordem as operações são executadas, já publicamos um artigo que orienta como identificar essa ordem, agora vamos realizar alguns testes com um script (autor: Adrian Billington) que mostra o plano de execução no mesmo formato da DBMS_XPLAN e acrescenta uma coluna indicativa da ordem de execução no relatório do plano de execução.

 

Como utilizar o script

O nome do script é XPLAN ele funciona com as versões de Oracle 10g ou superior, para utiliza-lo é necessário ter acesso as visões: GV$SESSION e GV$SQL_PLAN.

Esse script trabalha com 3 parâmetros posicionais:

  1. sql_id – opcional ( se não for informado o script vai considerar o ultimo sql_id executado)
  2. sql_child_number – opcional ( se não for informado o script vai utilizar “0”)
  3. plan_format – opcional ( se não for informado o script vai utilizar ‘TYPICAL IOSTATS LAST +PEEKED_BINDS’

O parâmetro plan_format pode receber os mesmos valores que utilizamos no pacote DBMS_XPLAN

Sintaxe para uso do script: @xplan.sql <sql_id> [cursor_child_number] [format]

 

Exemplos de utilização do script

 

Passando o parâmetro sql_id

 

A seguir vamos executar uma consulta, obter seu SQL_ID e executar o script “xplan.sql” passando somente o primeiro parâmetro “sql_id”.

No plano de execução que será gerado vamos observar que serão incluídas duas colunas a mais em relação ao plano gerado pelo pacote DBMS_XPLAN, essas colunas são:

  • “Pid” – Segunda coluna no plano de execução que indica o Parent ID da operação executada nesta linha.
  • “Ord” – Terceira coluna no plano de execução que indica a sequência em que operações serão executadas.

 

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
SQL > ALTER SESSION SET statistics_level=ALL;

Session altered.

SQL >
SQL > VARIABLE B1       number;
SQL > VARIABLE B2       number;
SQL >
SQL > EXEC    :B1  := 01;

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.02
SQL > EXEC    :B2  := 50;

PL/SQL procedure successfully completed.

SQL >
SQL >
SQL > SELECT nf.ID_NF,
  2         nf.CLIENTE,
  3         nf.DT_EMISSAO,
  4         it.QUATIDADE,
  5         pr.NOME
  6    FROM notafiscal nf,
  7         item it,
  8         produto pr
  9   WHERE nf.ID_NF = it.ID_NF
 10     AND it.ID_PRODUTO = pr.ID_PRODUTO
 11     AND nf.DT_EMISSAO between sysdate-500 and sysdate
 12     AND pr.ID_PRODUTO between :B1 and :B2
 13   ORDER BY 1,4;

     ID_NF CLIENTE                                            DT_EMISSA  QUATIDADE NOME
---------- -------------------------------------------------- --------- ---------- --------------------
         9 IXTLXLZGLRZZ9                                      06-DEC-14         13 UFWWBUYCFLHHPEWDCJZI
        93 XCIIIVWRXRVYVDW93                                  09-DEC-14          8 FADDRUNENHLLSLTXQURR
      1486 CDLXXXVINZAWPDPFEG1486                             02-DEC-14         14 TTGFJBFYFYOBYXNETOCJ
      1678 DCLXXVIIIWAFXIJNOXU1678                            12-DEC-14          8 NNTPTQVWEPOBYVUAQQJQ
      1921 CMXXITQSUDUVAWK1921                                01-DEC-14          4 OWJNSZBBOUOZATMDNYUM
      1921 CMXXITQSUDUVAWK1921                                01-DEC-14         16 XLIOVPATSBHRHXUMMJSK
      2101 CIGJURWGYRYR2101                                   10-DEC-14         16 OSMSAMQIEOEAXLPGXNWG
      2696 DCXCVIDCZJZZKCHL2696                               06-DEC-14          7 ONSJDLQYFOPTSKOWZNLA
      2696 DCXCVIDCZJZZKCHL2696                               06-DEC-14         14 YKCITKBFLEFLVAHUBHIM
      2821 DCCCXXIGSRPEGAGBJ2821                              24-NOV-14         13 QVBVQDPUNVGZQKRWVYEU
      3003 IIIYNLTBADRUH3003                                  12-DEC-14          2 SYCKCSXNOUNGGTYEOKRG
      3054 LIVROGRHTBULC3054                                  03-DEC-14         12 FEZJZBEABPLJYGSFKMSO
      3120 CXXOVFVTVWTKT3120                                  29-NOV-14         11 MLCUEYBFZRAOOWTAZWYO
      3239 CCXXXIXYWHXOMBPKB3239                              11-DEC-14         15 FOFDIEQAOEQKCQBLYCEI
      3379 CCCLXXIXPYWQPJGTGT3379                             10-DEC-14         18 FEZJZBEABPLJYGSFKMSO
      3903 CMIIIYPYCIAKBUZ3903                                12-DEC-14         12 WIECXGRLBOMIIPBKFFIH
      4428 CDXXVIIIKTEKOZFSNG4428                             01-DEC-14          2 QVBVQDPUNVGZQKRWVYEU
      4619 DCXIXJQLUGCZVQI4619                                06-DEC-14         18 ICDPQWNDSFVJAVKFQPTJ

18 rows selected.

SQL >
SQL >
SQL >
SQL > SELECT sql_id, child_number
  2    FROM v$sql
  3   WHERE sql_text LIKE 'SELECT nf.ID_NF%'
  4     AND sql_text NOT LIKE '%v$sql%';

SQL_ID        CHILD_NUMBER
------------- ------------
6hu66yktv0xzt            0

SQL >
SQL > @xplan 6hu66yktv0xzt

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  6hu66yktv0xzt, child number 0
-------------------------------------
SELECT nf.ID_NF,        nf.CLIENTE,        nf.DT_EMISSAO,
it.QUATIDADE,        pr.NOME   FROM notafiscal nf,        item it,
  produto pr  WHERE nf.ID_NF = it.ID_NF    AND it.ID_PRODUTO =
pr.ID_PRODUTO    AND nf.DT_EMISSAO between sysdate-:"SYS_B_0" and
sysdate    AND pr.ID_PRODUTO between :B1 and :B2  ORDER BY
:"SYS_B_1",:"SYS_B_2"

Plan hash value: 3275322104

---------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Pid | Ord | Operation                      | Name       | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |
---------------------------------------------------------------------------------------------------------------------------------------------------
|   0 |     |   9 | SELECT STATEMENT               |            |      1 |        |       |    38 (100)|          |     18 |00:00:00.01 |     112 |
|   1 |   0 |   8 |  SORT ORDER BY                 |            |      1 |      4 |   276 |    38   (3)| 00:00:01 |     18 |00:00:00.01 |     112 |
|*  2 |   1 |   7 |   FILTER                       |            |      1 |        |       |            |          |     18 |00:00:00.01 |     112 |
|*  3 |   2 |   6 |    HASH JOIN                   |            |      1 |      4 |   276 |    37   (0)| 00:00:01 |     18 |00:00:00.01 |     112 |
|*  4 |   3 |   3 |     HASH JOIN                  |            |      1 |     42 |  1848 |    35   (0)| 00:00:01 |     18 |00:00:00.01 |     110 |
|*  5 |   4 |   1 |      TABLE ACCESS FULL         | NOTAFISCAL |      1 |     36 |  1188 |    20   (0)| 00:00:01 |     38 |00:00:00.01 |      64 |
|*  6 |   4 |   2 |      TABLE ACCESS FULL         | ITEM       |      1 |   2011 | 22121 |    15   (0)| 00:00:01 |   2017 |00:00:00.01 |      46 |
|   7 |   3 |   5 |     TABLE ACCESS BY INDEX ROWID| PRODUTO    |      1 |     50 |  1250 |     2   (0)| 00:00:01 |     50 |00:00:00.01 |       2 |
|*  8 |   7 |   4 |      INDEX RANGE SCAN          | PRODUTO_PK |      1 |     50 |       |     1   (0)| 00:00:01 |     50 |00:00:00.01 |       1 |
---------------------------------------------------------------------------------------------------------------------------------------------------

Peeked Binds (identified by position):
--------------------------------------

   1 - :SYS_B_0 (NUMBER): 500
   2 - :SYS_B_1 (NUMBER): 1
   3 - :SYS_B_2 (NUMBER): 50

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter((:B2>=:B1 AND SYSDATE@!>=SYSDATE@!-:SYS_B_0))
   3 - access("IT"."ID_PRODUTO"="PR"."ID_PRODUTO")
   4 - access("NF"."ID_NF"="IT"."ID_NF")
   5 - filter(("NF"."DT_EMISSAO">=SYSDATE@!-:SYS_B_0 AND "NF"."DT_EMISSAO"<=SYSDATE@!))
   6 - filter(("IT"."ID_PRODUTO"<=:B2 AND "IT"."ID_PRODUTO">=:B1))
   8 - access("PR"."ID_PRODUTO">=:B1 AND "PR"."ID_PRODUTO"<=:B2)

About
------
  - XPlan v1.2 by Adrian Billington (http://www.oracle-developer.net)


42 rows selected.

SQL >

 
O script “xplan.sql” foi acionado na linha 70 da log acima.
 

Passando os parâmetros sql_id e sql_child_number

Agora vamos executar uma consulta, obter seu SQL_ID e CHILD_NUMBER para utiliza-los na execução do script “xplan.sql” passando o primeiro parâmetro “sql_id” e o segundo parâmetro “sql_child_number”.

 

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
SQL > VARIABLE B1       number;
SQL > VARIABLE B2       number;
SQL >
SQL > EXEC    :B1  := 01;

PL/SQL procedure successfully completed.

SQL > EXEC    :B2  := 500;

PL/SQL procedure successfully completed.

SQL >
SQL >
SQL > SELECT nf.ID_NF,
  2         nf.CLIENTE,
  3         nf.DT_EMISSAO,
  4         it.QUATIDADE,
  5         pr.NOME
  6    FROM notafiscal nf,
  7         item it,
  8         produto pr
  9   WHERE nf.ID_NF = it.ID_NF
 10     AND it.ID_PRODUTO = pr.ID_PRODUTO
 11     AND nf.DT_EMISSAO between sysdate-500 and sysdate
 12     AND pr.ID_PRODUTO between :B1 and :B2
 13   ORDER BY 1,4;

     ID_NF CLIENTE                                            DT_EMISSA  QUATIDADE NOME
---------- -------------------------------------------------- --------- ---------- --------------------
         9 IXTLXLZGLRZZ9                                      06-DEC-14          4 YKNGNGJOHJAUFPTNJSNI
         9 IXTLXLZGLRZZ9                                      06-DEC-14          7 YNLNIUCBVWQDLZSBOTJF
         ....................................................
      4773 DCCLXXIIIWDOKMYFTKS4773                            06-DEC-14          4 NLUXXQGWCPHQOIVYSXPR
      4773 DCCLXXIIIWDOKMYFTKS4773                            06-DEC-14         13 LHZXFMSDMNUTQECSJXST
      4773 DCCLXXIIIWDOKMYFTKS4773                            06-DEC-14         17 AVYODSIJYKOCRCOWTDAD

158 rows selected.

SQL >
SQL >
SQL >
SQL > SELECT sql_id, child_number
  2    FROM v$sql
  3   WHERE sql_text LIKE 'SELECT nf.ID_NF%'
  4     AND sql_text NOT LIKE '%v$sql%';

SQL_ID        CHILD_NUMBER
------------- ------------
6hu66yktv0xzt            0
6hu66yktv0xzt            1

SQL >
SQL >
SQL > @xplan 6hu66yktv0xzt 1

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  6hu66yktv0xzt, child number 1
-------------------------------------
SELECT nf.ID_NF,        nf.CLIENTE,        nf.DT_EMISSAO,
it.QUATIDADE,        pr.NOME   FROM notafiscal nf,        item it,
  produto pr  WHERE nf.ID_NF = it.ID_NF    AND it.ID_PRODUTO =
pr.ID_PRODUTO    AND nf.DT_EMISSAO between sysdate-:"SYS_B_0" and
sysdate    AND pr.ID_PRODUTO between :B1 and :B2  ORDER BY
:"SYS_B_1",:"SYS_B_2"

Plan hash value: 1159922978

------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Pid | Ord | Operation             | Name       | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |
------------------------------------------------------------------------------------------------------------------------------------------
|   0 |     |   8 | SELECT STATEMENT      |            |      1 |        |       |    40 (100)|          |    158 |00:00:00.01 |     115 |
|   1 |   0 |   7 |  SORT ORDER BY        |            |      1 |    145 | 10005 |    40   (3)| 00:00:01 |    158 |00:00:00.01 |     115 |
|*  2 |   1 |   6 |   FILTER              |            |      1 |        |       |            |          |    158 |00:00:00.01 |     115 |
|*  3 |   2 |   5 |    HASH JOIN          |            |      1 |    145 | 10005 |    39   (0)| 00:00:01 |    158 |00:00:00.01 |     115 |
|*  4 |   3 |   3 |     HASH JOIN         |            |      1 |    145 |  6380 |    35   (0)| 00:00:01 |    158 |00:00:00.01 |     110 |
|*  5 |   4 |   1 |      TABLE ACCESS FULL| NOTAFISCAL |      1 |     36 |  1188 |    20   (0)| 00:00:01 |     38 |00:00:00.01 |      64 |
|*  6 |   4 |   2 |      TABLE ACCESS FULL| ITEM       |      1 |  20071 |   215K|    15   (0)| 00:00:01 |  20071 |00:00:00.01 |      46 |
|*  7 |   3 |   4 |     TABLE ACCESS FULL | PRODUTO    |      1 |    500 | 12500 |     4   (0)| 00:00:01 |    500 |00:00:00.01 |       5 |
------------------------------------------------------------------------------------------------------------------------------------------

Peeked Binds (identified by position):
--------------------------------------

   1 - :SYS_B_0 (NUMBER): 500
   2 - :SYS_B_1 (NUMBER): 1
   3 - :SYS_B_2 (NUMBER): 500

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter((:B2>=:B1 AND SYSDATE@!>=SYSDATE@!-:SYS_B_0))
   3 - access("IT"."ID_PRODUTO"="PR"."ID_PRODUTO")
   4 - access("NF"."ID_NF"="IT"."ID_NF")
   5 - filter(("NF"."DT_EMISSAO">=SYSDATE@!-:SYS_B_0 AND "NF"."DT_EMISSAO"<=SYSDATE@!))
   6 - filter(("IT"."ID_PRODUTO">=:B1 AND "IT"."ID_PRODUTO"<=:B2))
   7 - filter(("PR"."ID_PRODUTO">=:B1 AND "PR"."ID_PRODUTO"<=:B2))

About
------
  - XPlan v1.2 by Adrian Billington (http://www.oracle-developer.net)


41 rows selected.
SQL >

 
O script “xplan.sql” foi acionado na linha 54 da log acima.
 

Passando os parâmetros sql_id e plan_format

Para finalizar vamos executar uma consulta e passar para o script “xplan.sql” o primeiro parâmetro “sql_id” e o terceiro parâmetro “plan_format”.
 

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
SQL > VARIABLE B1       number;
SQL > VARIABLE B2       number;
SQL >
SQL > EXEC    :B1  := 01;

PL/SQL procedure successfully completed.

SQL > EXEC    :B2  := 30;

PL/SQL procedure successfully completed.

SQL >
SQL >
SQL > SELECT nf.ID_NF,
  2         nf.CLIENTE,
  3         nf.DT_EMISSAO,
  4         it.QUATIDADE,
  5         pr.NOME
  6    FROM notafiscal nf,
  7         item it,
  8         produto pr
  9   WHERE nf.ID_NF = it.ID_NF
 10     AND it.ID_PRODUTO = pr.ID_PRODUTO
 11     AND nf.DT_EMISSAO between sysdate-500 and sysdate
 12     AND pr.ID_PRODUTO between :B1 and :B2
 13   ORDER BY 1,4;

     ID_NF CLIENTE                                            DT_EMISSA  QUATIDADE NOME
---------- -------------------------------------------------- --------- ---------- --------------------
         9 IXTLXLZGLRZZ9                                      06-DEC-14         13 UFWWBUYCFLHHPEWDCJZI
        93 XCIIIVWRXRVYVDW93                                  09-DEC-14          8 FADDRUNENHLLSLTXQURR
      1486 CDLXXXVINZAWPDPFEG1486                             02-DEC-14         14 TTGFJBFYFYOBYXNETOCJ
      1921 CMXXITQSUDUVAWK1921                                01-DEC-14          4 OWJNSZBBOUOZATMDNYUM
      1921 CMXXITQSUDUVAWK1921                                01-DEC-14         16 XLIOVPATSBHRHXUMMJSK
      2101 CIGJURWGYRYR2101                                   10-DEC-14         16 OSMSAMQIEOEAXLPGXNWG
      2696 DCXCVIDCZJZZKCHL2696                               06-DEC-14         14 YKCITKBFLEFLVAHUBHIM
      3120 CXXOVFVTVWTKT3120                                  29-NOV-14         11 MLCUEYBFZRAOOWTAZWYO
      3239 CCXXXIXYWHXOMBPKB3239                              11-DEC-14         15 FOFDIEQAOEQKCQBLYCEI
      4619 DCXIXJQLUGCZVQI4619                                06-DEC-14         18 ICDPQWNDSFVJAVKFQPTJ

10 rows selected.

SQL >
SQL >
SQL >
SQL > SELECT sql_id, child_number
  2    FROM v$sql
  3   WHERE sql_text LIKE 'SELECT nf.ID_NF%'
  4     AND sql_text NOT LIKE '%v$sql%';

SQL_ID        CHILD_NUMBER
------------- ------------
6hu66yktv0xzt            0

SQL >
SQL >
SQL > @xplan 6hu66yktv0xzt "" "ADVANCED IOSTATS LAST"

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  6hu66yktv0xzt, child number 0
-------------------------------------
SELECT nf.ID_NF,        nf.CLIENTE,        nf.DT_EMISSAO,
it.QUATIDADE,        pr.NOME   FROM notafiscal nf,        item it,
  produto pr  WHERE nf.ID_NF = it.ID_NF    AND it.ID_PRODUTO =
pr.ID_PRODUTO    AND nf.DT_EMISSAO between sysdate-:"SYS_B_0" and
sysdate    AND pr.ID_PRODUTO between :B1 and :B2  ORDER BY
:"SYS_B_1",:"SYS_B_2"

Plan hash value: 3275322104

---------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Pid | Ord | Operation                      | Name       | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |
---------------------------------------------------------------------------------------------------------------------------------------------------
|   0 |     |   9 | SELECT STATEMENT               |            |      1 |        |       |    38 (100)|          |     10 |00:00:00.01 |     112 |
|   1 |   0 |   8 |  SORT ORDER BY                 |            |      1 |      3 |   207 |    38   (3)| 00:00:01 |     10 |00:00:00.01 |     112 |
|*  2 |   1 |   7 |   FILTER                       |            |      1 |        |       |            |          |     10 |00:00:00.01 |     112 |
|*  3 |   2 |   6 |    HASH JOIN                   |            |      1 |      3 |   207 |    37   (0)| 00:00:01 |     10 |00:00:00.01 |     112 |
|*  4 |   3 |   3 |     HASH JOIN                  |            |      1 |     38 |  1672 |    35   (0)| 00:00:01 |     10 |00:00:00.01 |     110 |
|*  5 |   4 |   1 |      TABLE ACCESS FULL         | NOTAFISCAL |      1 |     35 |  1155 |    20   (0)| 00:00:01 |     37 |00:00:00.01 |      64 |
|*  6 |   4 |   2 |      TABLE ACCESS FULL         | ITEM       |      1 |   1207 | 13277 |    15   (0)| 00:00:01 |   1229 |00:00:00.01 |      46 |
|   7 |   3 |   5 |     TABLE ACCESS BY INDEX ROWID| PRODUTO    |      1 |     30 |   750 |     2   (0)| 00:00:01 |     30 |00:00:00.01 |       2 |
|*  8 |   7 |   4 |      INDEX RANGE SCAN          | PRODUTO_PK |      1 |     30 |       |     1   (0)| 00:00:01 |     30 |00:00:00.01 |       1 |
---------------------------------------------------------------------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1
   5 - SEL$1 / NF@SEL$1
   6 - SEL$1 / IT@SEL$1
   7 - SEL$1 / PR@SEL$1
   8 - SEL$1 / PR@SEL$1

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('11.2.0.4')
      DB_VERSION('11.2.0.4')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$1")
      FULL(@"SEL$1" "NF"@"SEL$1")
      FULL(@"SEL$1" "IT"@"SEL$1")
      INDEX_RS_ASC(@"SEL$1" "PR"@"SEL$1" ("PRODUTO"."ID_PRODUTO"))
      LEADING(@"SEL$1" "NF"@"SEL$1" "IT"@"SEL$1" "PR"@"SEL$1")
      USE_HASH(@"SEL$1" "IT"@"SEL$1")
      USE_HASH(@"SEL$1" "PR"@"SEL$1")
      END_OUTLINE_DATA
  */


Peeked Binds (identified by position):
--------------------------------------

   1 - :SYS_B_0 (NUMBER): 500
   2 - :SYS_B_1 (NUMBER): 1
   3 - :SYS_B_2 (NUMBER): 30

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter((:B2>=:B1 AND SYSDATE@!>=SYSDATE@!-:SYS_B_0))
   3 - access("IT"."ID_PRODUTO"="PR"."ID_PRODUTO")
   4 - access("NF"."ID_NF"="IT"."ID_NF")
   5 - filter(("NF"."DT_EMISSAO">=SYSDATE@!-:SYS_B_0 AND "NF"."DT_EMISSAO"<=SYSDATE@!))
   6 - filter(("IT"."ID_PRODUTO"<=:B2 AND "IT"."ID_PRODUTO">=:B1))
   8 - access("PR"."ID_PRODUTO">=:B1 AND "PR"."ID_PRODUTO"<=:B2)

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - (#keys=2) "NF"."ID_NF"[NUMBER,22], "IT"."QUATIDADE"[NUMBER,22], "PR"."NOME"[VARCHAR2,20], "NF"."CLIENTE"[VARCHAR2,50],
      "NF"."DT_EMISSAO"[DATE,7]
   2 - "NF"."ID_NF"[NUMBER,22], "NF"."DT_EMISSAO"[DATE,7], "NF"."CLIENTE"[VARCHAR2,50], "IT"."QUATIDADE"[NUMBER,22],
       "PR"."NOME"[VARCHAR2,20]
   3 - (#keys=1) "NF"."ID_NF"[NUMBER,22], "NF"."DT_EMISSAO"[DATE,7], "NF"."CLIENTE"[VARCHAR2,50], "IT"."QUATIDADE"[NUMBER,22],
      "PR"."NOME"[VARCHAR2,20]
   4 - (#keys=1) "NF"."ID_NF"[NUMBER,22], "NF"."DT_EMISSAO"[DATE,7], "NF"."CLIENTE"[VARCHAR2,50], "IT"."QUATIDADE"[NUMBER,22],
      "IT"."ID_PRODUTO"[NUMBER,22]
   5 - "NF"."ID_NF"[NUMBER,22], "NF"."CLIENTE"[VARCHAR2,50], "NF"."DT_EMISSAO"[DATE,7]
   6 - "IT"."QUATIDADE"[NUMBER,22], "IT"."ID_PRODUTO"[NUMBER,22], "IT"."ID_NF"[NUMBER,22]
   7 - "PR"."ID_PRODUTO"[NUMBER,22], "PR"."NOME"[VARCHAR2,20]
   8 - "PR".ROWID[ROWID,10], "PR"."ID_PRODUTO"[NUMBER,22]

About
------
  - XPlan v1.2 by Adrian Billington (http://www.oracle-developer.net)


86 rows selected.

SQL >

 
O script “xplan.sql” foi acionado na linha 57 da log acima.
 

Script

xplan.sql

Referências

www.oracle-developer.net

https://github.com/oracle-developer/xplan

 
 
Promo-D75L

video-02
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios são marcados com *