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.
Qual é mais rápido? Decode ou Case?
-
- Rank: Programador Júnior
- Mensagens: 18
- Registrado em: Qui, 04 Set 2008 2:01 pm
- Localização: Cravinhos - SP
- dr_gori
- 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
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)
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)
-
- 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.
- dr_gori
- 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
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!
* 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!
-
- 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!
Vlw! Obrigado!
-
- 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?
- dr_gori
- 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
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
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...porque o índice no campo inviabiliza o uso do decode
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...
-
- 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.
Vou dar uma procurada no Forum em mais coisas sobre performance.
Valeu pela ajuda.
Abraços.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Bing [Bot] e 1 visitante