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