cursor vs join

Tuning de Banco, Tuning de SQL, Ferramentas de tuning
Responder
Avatar do usuário
heraldoaraujo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Dom, 19 Fev 2012 12:10 pm

Boa tarde pessoal!

Alguém sabe me dizer se tem algum ganho de peformance entre criar um cursor que em seguida uma tupla irá consultar em outra tabela ou criar uma consulta com um join entre duas tabelas seria mais performático?
Por exemplo:

Selecionar tudo

for cs in (select id, nome from pessoas)
loop
select cs.nome, c.curso, c.status_final from cursos c where c.id = cs.id
e

Selecionar tudo

select cs.nome, c.curso, c.status_final from cursos c,pessoas cs where c.id = cs.id 
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Em regra geral, o mais performático seria o próprio JOIN.
Mas tem que ver como estão criadas as tabelas, índices, quantidade de dados nas tabelas e etc.
Avatar do usuário
fbifabio
Moderador
Moderador
Mensagens: 199
Registrado em: Ter, 22 Fev 2011 1:51 pm
Localização: São Paulo - SP
Contato:
Fábio Prado
www.fabioprado.net

heraldoaraujo ,

Evite PL/SQL (cursor) se você pode resolver o problema com SQL puro. SQL puro (sem interação com PL/SQL) é sempre mais rápido.

[]s
Avatar do usuário
heraldoaraujo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Dom, 19 Fev 2012 12:10 pm

fbprado,

Eu realizei finalmente um teste e o código PL/SQL com cursor foi 20x mais rápido que um join SQL no Oracle.
Porém antes disso nessa mesma consulta eu criei um índice em que o curso caiu de 19000(5hs) para 500(5hs),acho que criei um bom índice,porém mesmo assim depois de altera o código SQL para um cursor em PL/SQL o tempo caiu para 9mins.
Pode haver alguma explicação para isso? Para o resultado final queria informar que o resultado foi de 189.923 tuplas
Avatar do usuário
fbifabio
Moderador
Moderador
Mensagens: 199
Registrado em: Ter, 22 Fev 2011 1:51 pm
Localização: São Paulo - SP
Contato:
Fábio Prado
www.fabioprado.net

@heraldoaraujo,

Muito estranho isso acontecer! Só vou conseguir explicar se você postar aqui para nós o código dos 2 exemplos e o plano de execução gerado pelo SQL.

[]s
Responder
  • Informação
  • Quem está online

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