Qual é mais rápido? Decode ou Case?

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
joao.alberto.gt
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Qui, 04 Set 2008 2:01 pm
Localização: Cravinhos - SP

Pessoal, boa tarde.

Tenho usado decode e case em alguns selects, mas não consegui identificar qual é mais vantajoso quando se trata de velocidade. Alguém já fez esse teste?

Abraços.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
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

Na real, essa "diferença" será tão pequena que só será visível se for executada milhares de vezes.

Talvez fazendo um SELECT com DECODE e outro com CASE e executar milhares de vezes a mesma coisa pra ver se fica visível essa diferença.

Normalmente não é um DECODE ou CASE que vai fazer o sql ficar lento. (não é coisas na cláusula SELECT e sim na WHERE)

:roll:
joao.alberto.gt
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Qui, 04 Set 2008 2:01 pm
Localização: Cravinhos - SP

está, então vamos considerar o uso no where... existe alguma diferença de velocidade? É que já ouvi dizer que decode é lento.
NaPraia
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 88
Registrado em: Sex, 22 Fev 2008 8:24 am
Localização: Floripa - SC

como foi dito, a diferença é no where e não do decode e do case.

isso quer dizer você tiver 500 decodes ou 500 cases,
ou fizer join com várias tabelas pesadas.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
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

Acho que o joao.alberto.gt está com a seguinte dúvida:

* Disseram pra ele que o DECODE é lento. Na realidade, o que torna o SQL lento por causa do DECODE é quando ele é usado na cláusula WHERE de um campo que tenha ÍNDICE! Daí o decode faz com que a pesquisa fique lenta, pois é uma função usada num campo com índice! Tipo: a culpa é do DECODE, mas o que está fazendo ficar lento é um FULL SCAN na tabela!

Só que qualquer função usada vai fazer essa lentidão! Não é o DECODE em si.. saca ? O decode sozinho é rapido, o problema aí é o uso dele em campos com índice, pois vai matar o uso do índice...

Provavelmente é essa a dúvida!
joao.alberto.gt
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Qui, 04 Set 2008 2:01 pm
Localização: Cravinhos - SP

Putz! Matou cara... essa era a dúvida, agora entendi.

Vlw! Obrigado!
joao.alberto.gt
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Qui, 04 Set 2008 2:01 pm
Localização: Cravinhos - SP

Pra expandir um pouco minha visão sobre isso, me explica como funciona esse esquema do índice... porque o índice no campo inviabiliza o uso do decode ou do case, enfim... como funciona a cláusula quando aplicado sobre um campo com índice? Outra dúvida: pra NVL ou NVL2, também vale essa regra?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
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

porque o índice no campo inviabiliza o uso do decode
Na real, é o contrário! O DECODE é que inviabiliza o índice do campo! Quando você tem um índice em um campo e você tenta usar uma função nele, o índice não pode ser usado... Qualquer função! NVL, DECODE, LOWER, UPPER, etc...

E é isso que faz ficar lento! Imagina você ter que achar uma coisa num livro. Em vez de ir no índice e ir direto pra pagina, você começa pela pagina 1 e vai lendo página por pagina... É exatamente isso que o banco faz quando não usa o índice ! Le linha a linha...
joao.alberto.gt
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 18
Registrado em: Qui, 04 Set 2008 2:01 pm
Localização: Cravinhos - SP

beleza cara. Entendi.
Vou dar uma procurada no Forum em mais coisas sobre performance.
Valeu pela ajuda.
Abraços.
Responder
  • Informação