[firebase-br] RES: Otimizar Select
Felix
felix.sol em terra.com.br
Qua Mar 16 14:00:02 -03 2011
Não use o 'not in'.
Fiz um teste aqui com o seguinte cenário: tabela que tem perto de 1.000.000
de registros (para ex. 'tarefas') e outra que tem 500 (para ex. 'usuarios').
select USUARIO_ID
from TB_USUARIO
where USUARIO_ID not in (select USUARIO_ID from TB_TAREFAS)
Resultado em 2 minutos e 23 segundos.
Com o uso do 'distinct' pulou para 11 minutos.
Usando 'not exist':
select USUARIO_ID
from TB_USUARIO
where not exists (select first 1 usuario_id from TB_TAREFAS where
TB_TAREFAS.USUARIO_ID = tb_usuario.usuario_id )
Resultado em 2 minutos e 22 segundos. Não houve diferença significativa.
Versão final, roda em MENOS DE 2 SEGUNDOS :
select usuario_id from
( select sum(registros) registros, usuario_id from
( select 0 registros, usuario_id from tb_usuario
union
select count(usuario_id) registros, usuario_id from tb_tarefas
group by usuario_id
)
group by usuario_id
)
where registros = 0
Isso foi sem indice, PLAN NATURAL, apenas para teste. Não esqueça de criar
os indices corretamente.
Fco. Felix
Desenvolvimento de Sistemas
www.soltecnologia.com.br
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Marcelo Moreira
Enviada em: quarta-feira, 16 de março de 2011 12:46
Para: FireBase
Assunto: [firebase-br] Otimizar Select
Pessoal,
Trabalhando com o Firebird 2.1.3 em modo Classic imaginemos a seguinte
situacao
TB_TAREFAS (contendo mais ou menos umas 100 mil linhas)
TB_USUARIO (contendo mais ou menos umas 40 linhas)
O que eu preciso é pegar todos os USUARIO_ID cadastrados na tabela
TB_USUARIO eliminando apenas os USUARIO_ID que estiverem na tabela
TB_TAREFAS
select USURIAO_ID
from TB_USUARIO
where USUARIO_ID not in (select USUARIO_ID from TB_TAREFAS)
É isso mesmo ou tem algo que eu possa fazer para melhorar o SELECT?
Obrigado!
--
Marcelo Moreira
(31) 8420-2723
E-mail / MSN: marcelomoreira.souza em hotmail.com
E-mail: marcelomoreira.souza em gmail.com
Skype: marcelomoreira.souza
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista