ДЕЛО против ДЕКОДА - PullRequest
       5

ДЕЛО против ДЕКОДА

32 голосов
/ 07 июля 2010

Обращаясь к предыдущему вопросу , мне было интересно, всегда ли можно заменить DECODE на CASE и какой из них лучше для производительности?

Ответы [ 6 ]

52 голосов
/ 09 июля 2010

Существует одно большое различие между DECODE и CASE, и оно имеет отношение к сравнению NULLs.DECODE вернет "true", если вы сравните NULL с NULL.CASE не будет.Например:

DECODE(NULL, NULL, 1, 0)

вернет '1'.

CASE NULL
    WHEN NULL THEN 1
    ELSE 0
END

вернет '0'.Вы должны были бы написать это как:

CASE
    WHEN NULL IS NULL THEN 1
    ELSE 0
END
44 голосов
/ 07 июля 2010

Как всегда с Oracle ... AskTom ...

Из этого сообщения ...

Декодирование нескольконеясен - ДЕЛО очень и очень ясно.Вещи, которые легко сделать в декодировании, легко сделать в CASE, вещи, которые трудно или почти невозможно сделать в декодировании, легко сделать в CASE.CASE, с точки зрения логики, выигрывает руки.

С точки зрения производительности кажется, что они примерно одинаковы, опять же, в статье выше упоминаются некоторые различия в скорости, но без сравнения конкретных утверждений трудно сказать.

3 голосов
/ 27 декабря 2015

CASE - это оператор, а DECODE - это функция. Мы можем использовать CASE в предложении where и не можем использовать DECODE в предложении where. DECODE может проверять операторы равенства только тогда, когда CASE может поддерживать все реляционные операторы DECODE может использоваться в SQL только в том случае, когда CASE может использоваться в SQL и PL / SQL ДЕЛО лучше, чем ДЕКОД.

Вы можете найти больше: http://www.oraclegeneration.com/2014/01/sql-query-interview-questions.html

1 голос
/ 03 мая 2018

С точки зрения производительности, в Oracle декодирование и CASE не имеет никакого значения.

Но в Exadata декодирование выполняется быстрее, чем CASE.

Операция декодирования выполняется на уровне сервера хранения, где присутствуют данные, НО СЛУЧАЙ выполняется на уровне экземпляра БД, который получает данные с уровня хранения БД.

Несмотря на то, что передача данных по сети между хранилищем и сервером БД меньше (соединение Infiniband), такой передачи избегают при использовании декодирования статистики

0 голосов
/ 05 июня 2019

Сравнение от NULL до NULL возвращает значение как 1 вместо DECODE, возвращающего значение 1, и CASE, возвращающегося как 0.

0 голосов
/ 25 сентября 2013
select (DECODE(NULL, NULL, 1, 0)) from dual;

select (CASE
    WHEN NULL IS NULL THEN 1
    ELSE 0

END
)
from dual;

оба возвращают 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...