Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #94629
    gauss
    Participante

      Pessoal,

      Uma das queries que rodam no sistema da empresa faz uso da funcção TRIM em um dos campos do select. Isso faz com que a performance da query seja insatisfatória, pois ela acaba realizando Full Table Scan, ao invés
      de utilizar o índice. Exemplo:
      Caso1

      SELECT CAMPO01 FROM sch1.TABELA TRIM(ORS_ID) = :b1

      Caso2

      SELECT CAMPO01 FROM sch1.TABELA ORS_ID = :b1

      No caso01 a query leva 2 minutos, removendo o TRIM, no caso02, ela é instantânea. Existe alguma opção para forçar o uso de índices mesmo utilizando o TRIM?

      Uma das opções que andei procurando na net seria usar uma função para o TRIM, mas não ficou claro como efetivamente isso seria possível.

      Obrigdo pela ajuda!

      #94634
      vieri
      Participante

        index based function 😉

        Ve se sua query vai usar este índice.

        CREATE INDEX "SHC1"."IDX_FBI" ON "SHC1"."TABELA" (TRIM("ORS_ID")) COMPUTE STATISTICS;

        Cole o plano de execução ai pra gente, antes e após criação.

        #94635
        fsitja
        Participante

          [quote=”vieri”:3j6670vg]index based function 😉
          [/quote]

          Oops, brain fart detected

          Acho que você pensou em digitar function based index. 😆

          rs

          #94643
          vieri
          Participante

            fsitja,
            vai catar coquinho!!! hahahahah

            Vamos-lá cade o Explain plan ?!?!?!

            #94656
            gauss
            Participante

              Uia, vamos lá

              antes

              PLAN_TABLE_OUTPUT


              | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

              | 0 | SELECT STATEMENT | | 1423 | 469K| 15124 (1)| 00:02:32 |

              |* 1 | TABLE ACCESS FULL| TABELA | 1423 | 469K| 15124 (1)| 00:02:32 |

              Predicate Information (identified by operation id):

              1 - filter(TRIM("ORS_ID")=:SYS_B_0)

              depois

              PLAN_TABLE_OUTPUT


              | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

              | 0 | SELECT STATEMENT | | 1423 | 469K| 243 (0)| 00:00:03 |
              | 1 | TABLE ACCESS BY INDEX ROWID| TABELA | 1423 | 469K| 243 (0)| 00:00:03 |

              |* 2 | INDEX RANGE SCAN | TABELA_TRIM | 572 | | 1 (0)| 00:00:01 |

              Predicate Information (identified by operation id):

              2 - access(TRIM("ORS_ID")=:SYS_B_0)

              Ficou show, muito obrigado pela ajuda! 😀

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