7 мая 2013 г.

"CASE" на Exadata

Руководство по оптимизации обычной Oracle Database советует использовать оператор CASE, чтобы избежать дублирования кода и повторных просмотров одной и той же таблицы.
Для Oracle Exadata всё иначе:
  • Без оператора CASE используется Predicate Filtering, Column Projection и Storage Indexes на уровне серверов хранения.
  • С оператором CASE каждая строчка таблицы передается на сервер СУБД для обработки. Что оказывается медленнее.
Дальше примеры синтаксиса, на основании которых можно шутить на тему, что Oracle Exadata заточена под "китайский способ программирования".

Пример без использования CASE:
SELECT COUNT (*)
  FROM employees
  WHERE salary < 2000;

SELECT COUNT (*)
  FROM employees
  WHERE salary BETWEEN 2000 AND 4000;

SELECT COUNT (*)
  FROM employees
  WHERE salary>4000;

Пример с использованием CASE:
SELECT COUNT (CASE WHEN salary < 2000 
                   THEN 1 ELSE null END) count1, 
       COUNT (CASE WHEN salary BETWEEN 2001 AND 4000 
                   THEN 1 ELSE null END) count2, 
       COUNT (CASE WHEN salary > 4000 
                   THEN 1 ELSE null END) count3 
  FROM employees; 

Комментариев нет:

Отправить комментарий