Usar indices mesmo utilizando a função TRIM

Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #94629
    Avatar de gaussgauss
    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
    Avatar de vierivieri
    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
    Avatar de fsitjafsitja
    Participante

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

    Oops, brain fart detected

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

    rs

    #94643
    Avatar de vierivieri
    Participante

    fsitja,
    vai catar coquinho!!! hahahahah

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

    #94656
    Avatar de gaussgauss
    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.
plugins premium WordPress