- Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 12 anos, 10 meses atrás por
Fábio Prado.
-
AutorPosts
-
16 de abril de 2013 às 7:50 pm #105312
Clayton Dias
ParticipanteBom dia Srs.
Tenho uma dúvida de performance com dois select. Um faz uma conversão implícita, o outro não. No entanto apesar do custo do select que tem a conversão implícita ser muito maior, as operações feitas no plano de execução são iguais. Alguém pode me explicar o porque disto?
SQL> EXPLAIN PLAN FOR
2 SELECT *
3 FROM T_EXPE_STD
4 WHERE CDG_ENTI = PKG_STD.FN_TRAT_ACTO(3)
5 AND DTA_EXPE_ABER >= TO_DATE('01/04/2011')
6 AND DTA_EXPE_ABER < TO_DATE('15/04/2011'); Explicado. SQL> @?RDBMSADMINUTLXPLS.SQLPLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
Plan hash value: 1413817110-----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1355 | 404K| 1019 (1)| 00:00:13 |
| 1 | TABLE ACCESS BY INDEX ROWID| T_EXPE_STD | 1355 | 404K| 1019 (1)| 00:00:13 |
|* 2 | INDEX RANGE SCAN | I_EXPE_DTA_ABER | 1355 | | 22 (5)| 00:00:01 |
-----------------------------------------------------------------------------------------------SQL> EXPLAIN PLAN FOR
2 SELECT *
3 FROM T_EXPE_STD
4 WHERE CDG_ENTI = 3
5 AND DTA_EXPE_ABER >= TO_DATE('01/04/2011')
6 AND DTA_EXPE_ABER < TO_DATE('15/04/2011') 7 ; Explicado. SQL> @?RDBMSADMINUTLXPLS.SQLPLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
Plan hash value: 1413817110-----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 47 | 14382 | 56 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T_EXPE_STD | 47 | 14382 | 56 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | I_EXPE_DTA_ABER | 47 | | 21 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------
Grato pessoal!
16 de abril de 2013 às 10:53 pm #105315Fábio Prado
Participante@claytondiass,
O que faz a função PKG_STD.FN_TRAT_ACTO? Qual é o tipo de dado da coluna CDG_ENTI?
Cole aqui novamente o resultado do plano de execução, mas gere-o da seguinte forma:- ao invés de executar @?RDBMSADMINUTLXPLS.SQL
-
execute SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
Obs.: cole o resultado completo do plano de execução, incluindo as linhas de detalhes que revelam FILTER, ACCESS etc.
Att,
-
AutorPosts
- Você deve fazer login para responder a este tópico.