Otimização de query

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
filipe009
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Seg, 28 Jan 2008 6:42 pm
Localização: Niterói - RJ

Galera,
estou com uma tremenda dúvida. Coleto informações de uma determinada tabela com 9 milhões de registros. Essa tabela tem um indice pela data.

Selecionar tudo

select *
from data>= to_date( '20090909','yyyymmdd')
and data <to_date( '20090909','yyyymmdd')
and tipo_reg ='A' and status='canelado'
Essa é a query que tenho hj. Ela roda super rápido.

Terei que passar a trazer o tipo de registro B independente do status, estou fazendo da seguinte forma mas estou com medo da performance cair.

Selecionar tudo

select *
from data>= to_date( '20090909','yyyymmdd')
and data <to_date( '20090909','yyyymmdd')
and ( (tipo_reg ='A' and status='canelado') or tipo_reg ='B')
O que vocês acham, é melhor deixar o OR ou montar um union all conforme o sql abaixo.

Selecionar tudo

select *
from data>= to_date( '20090909','yyyymmdd')
and data <to_date( '20090909','yyyymmdd')
and tipo_reg ='A' and status='canelado'
uniom all
select *
from data>= to_date( '20090909','yyyymmdd')
and data <to_date( '20090909','yyyymmdd')
and tipo_reg ='B'
O que seria mas performático?
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Filipe,

Já passei por uma situação similar, não com 9 milhões de registros e o union apresentou um resultado melhor.

Você tem algum indice usando o tipo_reg e status?
filipe009
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Seg, 28 Jan 2008 6:42 pm
Localização: Niterói - RJ

Amigão, não tenho indice.
Mas no meu caso o OR está apresentando um melhor resultado.
Ele está demorando menos.
zeleandroxavier
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Dom, 04 Out 2009 11:03 am
Localização: Campo Mourão - PR
Contato:

acrescente mais um campo na condição que seja indice que a sua perfomace vai melhorar independente do union ou or. Já passei por isso a unica soluçao para eu foi acrescentar um campo que fosse um índice na condição.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 15 visitantes