Найти в Дзене
Oracle Developer

В чем разница между CBO и RBO

В чем разница между CBO и RBO? Коллеги, всем привет! С вами Кирилл Михалько. Я когда-то учился на курсах у Дениса, давно в канале и... порядком прикипел к нашему Oracle-сообществу. Это мой первый пост в канале прошу сильно не закидывать 🍅 🍅 Сегодня разберем классический вопрос, который по-прежнему всплывает на собеседованиях и в дискуссиях о производительности Oracle. Как известно Oracle Database использует оптимизатор запросов для построения плана выполнения SQL. Исторически в Oracle существовало два типа оптимизаторов: Rule-Based Optimizer (RBO) и Cost-Based Optimizer (CBO). Понимание разницы между ними важно для осознанной работы с планами выполнения и тюнинга запросов. Rule-Based Optimizer (RBO) — это такой представитель западного мира, основанного на правилах 😊 RBO не смотрит на реальные данные: размеры таблиц, распределение значений, селективность, а применяет набор статичных правил, поэтому в одних случаях он «угадывает» хороший план, а в других — жёстко промахивается. Н

В чем разница между CBO и RBO?

Коллеги, всем привет!

С вами Кирилл Михалько. Я когда-то учился на курсах у Дениса, давно в канале и... порядком прикипел к нашему Oracle-сообществу. Это мой первый пост в канале прошу сильно не закидывать 🍅 🍅

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

Как известно Oracle Database использует оптимизатор запросов для построения плана выполнения SQL. Исторически в Oracle существовало два типа оптимизаторов: Rule-Based Optimizer (RBO) и Cost-Based Optimizer (CBO). Понимание разницы между ними важно для осознанной работы с планами выполнения и тюнинга запросов.

Rule-Based Optimizer (RBO) — это такой представитель западного мира, основанного на правилах 😊 RBO не смотрит на реальные данные: размеры таблиц, распределение значений, селективность, а применяет набор статичных правил, поэтому в одних случаях он «угадывает» хороший план, а в других — жёстко промахивается.

На сегодня RBO считается устаревшим и не рекомендуется к использованию, однако хинт «RULE» позволяет принудительно задействовать старую версию оптимизатора.

CBO (Cost-Based Optimizer) — современный парень 😊, опирается на реальные данные по объектам (статистику), считает «стоимость» разных планов и выбирает самый «дешевый» (лучший) по своим метрикам. Впервые был представлен в 1992 году в Oracle Database 7, как альтернатива RBO, а уже в 10-й версии CBO устанавливался оптимизатором по умолчанию.

На сегодня является единственным официально поддерживаемым оптимизатором. Особенностью нового подхода является требование к наличию актуальной статистики (DBMS_STATS). Без этого условия CBO нормально работать не будет. В свое время даже был слоган: Cost-based optimizator wihout statistics, like a morning without cofee 😊

Основные особенности RBO

🔹 Работает по жестким правилам без анализа данных

🔹 Не требует сбора статистики

🔹 Предсказуемость планов — одинаковые запросы всегда дают одинаковый план

🔹 Считается устаревшим и не рекомендуется к использованию

Основные особенности CBO

🔹 Анализирует статистику таблиц и индексов

🔹 Адаптируется к изменениям данных

🔹 Оценивает несколько вариантов планов и выбирает оптимальный

🔹 Требует поддержания актуальной статистики

Пример: представьте таблицу с миллионом строк, где по индексу вы выбираете 90% данных.

SELECT * FROM orders WHERE status = 'DELIVERED';

RBO увидит индекс по полю status и использует его, что приведет к миллиону одиночных чтений — медленно. CBO, зная из статистики, что доставленных заказов 90%, выберет Full Table Scan — это будет быстрее.

Ключевая разница

RBO применяет статичные правила, CBO принимает решения на основе реальных данных. Поэтому для эффективной работы CBO критически важно наличие актуальной статистики.

Подытожим

🔸 RBO устарел и не поддерживается

🔸 CBO — единственный актуальный оптимизатор, работающий на статистике

🔸 Для корректной работы CBO обязательна актуальная статистика объектов

🔸 CBO адаптивен и эффективен для сложных запросов и больших объемов данных

А как часто вы обновляете статистику в своих базах? Сталкивались ли с неоптимальными планами из-за устаревшей статистики? Встречаетесь ли вы с хинтом RULE в коде?

Поделитесь опытом в комментариях 💬

Всем продуктивной работы и быстрых запросов! 🚀

#oracle #оптимизатор #CBO #RBO #производительность #планвыполнения #статистика #Kirill_Mihalko

Канал Oracle Developer | Чатик 💬

Мини-курс Оптимизация: Быстрый старт 🚀

Анкета предзаписи на 7 поток "Оптимизация Oracle SQL"

📱 Facebook 📱 YouTube 📱 ВКонтакте 📱 LinkedIn 📱 Threads RUTUBE