Ajuda Select

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
rafaeld
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 36
Registrado em: Seg, 28 Ago 2006 1:38 pm
Localização: Blumenau - SC

Ai galera, tenho esse select abaixo mas demora cerca de 30 segundos só esse select e já existe um indice que passo como parametro. Esta tabela tem 9 milhoes de linhas... alguém pode ajudar para melhorar a performance do select ?

Selecionar tudo

SELECT *
  FROM QS_ORDEM_PDC_SEQ_FBC_OPE    T5256
 WHERE T5256.CD_TIPO_PESSOA_EMPRESA  = 1
   AND T5256.CD_PESSOA_EMPRESA       = 1
   AND T5256.CD_TIPO_PESSOA_FILIAL   = 2
   AND T5256.CD_PESSOA_FILIAL        = 1
   AND TRUNC(T5256.DT_INI_OPERACAO)  >= '12-SEP-2007'
   AND TRUNC(T5256.DT_INI_OPERACAO)  <= '12-SEP-2007'
Valeu!
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5026
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Você está matando o índice com o seguinte comando:

Selecionar tudo

   AND TRUNC(T5256.DT_INI_OPERACAO)  >= '12-SEP-2007'
   AND TRUNC(T5256.DT_INI_OPERACAO)  <= '12-SEP-2007'
Se você usa função nos campos, o oracle ignora o índice.
Pra ficar rápido, faça da seguinte forma:

Selecionar tudo

   AND T5256.DT_INI_OPERACAO  >= '12-SEP-2007'
   AND T5256.DT_INI_OPERACAO  <  '13-SEP-2007'
Outra coisa interessante aí é você colocar um TO_DATE('12-SEP-2007', 'dd-mon-yyyy'), pra não dar problemas futuros.

:-o
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Rafael,

uma outra opção poderia ser a criação de um novo indice, porém esse indice daria um TRUNC no campo DT_INI_OPERACAO, por exemplo

Selecionar tudo

CREATE INDEX teste_idx_data ON mens_erro (TRUNC("DATA") ASC)

[]'s
Responder
  • Informação