В большинстве случаев, когда пользователь издает запрос к базе данных, существует более одного способа обращения к таблицам и извлечения данных. Поскольку существует много способов выполнения одного и того же оператора, Oracle использует стоимостной оптимизатор (Cost-Based Optimizer — CBO) для выбора лучшего плана выполнения запросов на основе стоимости запроса, выраженной в используемых ресурсах.
Оптимизация запросов — основа современных реляционных баз данных и существенная часть того, как Oracle выполняет свою работу. Оптимизатор запросов прозрачен для пользователей, и Oracle автоматически выбирает наилучшие методы доступа и соединения таблиц для ваших запросов перед тем, как начать их обработку.
На заметку! Чтобы выбрать наилучший план обработки, Oracle использует статистику по таблицам и индексам, которая включает подсчет количества строк и распределения “среза” данных из таблиц базы. (Статистика физического хранения и распределения данных по всем таблицам и индексам, столбцам и разделам хранится в различных таблицах словаря данных.) Вооруженный этой информацией, оптимизатор обычно с успехом выбирает наилучший путь доступа к необходимым данным для выполнения оператора SQL. Oracle также позволяет использовать подсказки (hints), чтобы переопределить выбранный оптимизатором план выполнения. Это связано с тем, что в некоторых случаях знание разработчика приложения о данных позволяет использовать более эффективные планы, чем может выбрать оптимизатор.
Мы детально поговорим об оптимизаторе Oracle в будущих статьях блога в контексте настройки производительности.
Совет. Вы можете также использовать оптимизатор Oracle в расширенном режиме настройки, как будет показано в новых заметках. Оптимизатор Oracle в режиме настройки — основа средства SQL Tuning Advisor, также будет описан далее. Читайте мой блог!