- Este tópico contém 4 respostas, 3 vozes e foi atualizado pela última vez 13 anos, 5 meses atrás por
gauss.
-
AutorPosts
-
junho 17, 2010 às 12:26 am #94629
gauss
ParticipantePessoal,
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 = :b1No 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!
junho 17, 2010 às 12:51 am #94634vieri
Participanteindex 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.
junho 17, 2010 às 1:43 am #94635fsitja
Participante[quote=”vieri”:3j6670vg]index based function 😉
[/quote]Oops, brain fart detected
Acho que você pensou em digitar function based index. 😆
rs
junho 17, 2010 às 8:14 am #94643vieri
Participantefsitja,
vai catar coquinho!!! hahahahahVamos-lá cade o Explain plan ?!?!?!
junho 17, 2010 às 9:11 pm #94656gauss
ParticipanteUia, 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! 😀
-
AutorPosts
- Você deve fazer login para responder a este tópico.
Compartilhe ! Além de ajudar, é legal ! :)
- Clique para compartilhar no Twitter(abre em nova janela)
- Clique para compartilhar no Facebook(abre em nova janela)
- Clique para compartilhar no LinkedIn(abre em nova janela)
- Clique para compartilhar no Reddit(abre em nova janela)
- Clique para compartilhar no WhatsApp(abre em nova janela)
- Clique para compartilhar no Telegram(abre em nova janela)
- Clique para enviar um link por e-mail para um amigo(abre em nova janela)
- Clique para imprimir(abre em nova janela)