Базовый механизм запуска SQL-запросов в Oracle - PullRequest
2 голосов
/ 11 октября 2011

Когда мы запускаем SQL-запрос, такой как

SELECT * FROM SOME_TABLE_NAME в ORACLE

Что именно происходит внутри? Есть ли парсер на работе? Это в C / C ++?

Может ли тело объяснить, пожалуйста?

Спасибо всем заранее.

Ответы [ 2 ]

4 голосов
/ 11 октября 2011

Короткий ответ - да, конечно, внутри Oracle есть модуль синтаксического анализа, который интерпретирует текст оператора.Насколько я понимаю, основная часть исходного кода Oracle находится в C.

Для общего ознакомления:

Любой оператор SQL потенциально проходит три этапа, когда Oracle запрашивает его выполнение.Часто управление возвращается клиенту между каждым из этих шагов, хотя детали могут зависеть от конкретного используемого клиента и способа, которым выполняются вызовы.

(1) Parse - я полагаю, что первыйна самом деле действие состоит в том, чтобы проверить, есть ли у Oracle кэшированная копия точного текста оператора.Если это так, это может спасти парсинг вашего утверждения снова.Если нет, он, конечно, должен проанализировать текст, а затем определить план выполнения, который Oracle считает оптимальным для данного оператора.Таким образом, концептуально, по крайней мере, на этом этапе работают две сущности - синтаксический анализатор и оптимизатор.

(2) Выполнить - для оператора SELECT этот шаг, как правило, запускает достаточно плана выполнения, чтобыготов вернуть несколько строк клиенту.В зависимости от деталей плана, это может означать выполнение всей задачи или выполнение небольшой части работы.Для любого другого типа оператора фаза выполнения - это когда вся работа фактически выполнена.

(3) Fetch - это когда строки фактически возвращаются клиенту.Обычно клиент имеет предопределенный размер массива выборки, который устанавливает максимальное количество строк, которые будут возвращены одним вызовом выборки.Таким образом, может быть много выборок, сделанных для одного утверждения.Конечно, если оператор является тем, который не может возвращать строки, тогда не требуется никакого шага извлечения.

0 голосов
/ 11 октября 2011

Manasi,

Я думаю, что внутренне Oracle будет иметь свой собственный анализатор, который выполняет синтаксический анализ и пытается скомпилировать запрос.Думаю, это не связано с C или C ++.

Но нужно подтвердить.

- Джастин Самуэль.

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