Pular para o conteúdo
Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #105312
    Clayton Dias
    Participante

      Bom 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.SQL

      PLAN_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.SQL

      PLAN_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!

      #105315
      Fá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,

      Visualizando 2 posts - 1 até 2 (de 2 do total)
      • Você deve fazer login para responder a este tópico.