Обработка инструкции SQL
Прежде чем обсуждать методы использования SQL программным способом, необходимо обсудить процесс обработки инструкции SQL. Описанные действия являются общими для всех трех методов, хотя каждый метод выполняет их в разное время. На следующем рисунке показаны шаги, связанные с обработкой инструкции SQL, которые обсуждаются в остальной части этого раздела.
Чтобы обработать инструкцию SQL, СУБД выполняет следующие пять шагов:
СУБД сначала анализирует инструкцию SQL. Он разбивает оператор на отдельные слова, называемые маркерами, гарантирует, что инструкция имеет допустимые глаголы и допустимые предложения и т. д. Синтаксические ошибки и ошибки можно обнаружить на этом шаге.
СУБД проверяет инструкцию. Он проверяет инструкцию для системного каталога. Существуют ли все таблицы, именованные в инструкции, в базе данных? Существуют ли все столбцы и являются ли имена столбцов однозначной? У пользователя есть необходимые привилегии для выполнения инструкции? Некоторые семантические ошибки можно обнаружить на этом шаге.
СУБД создает план доступа для инструкции. План доступа представляет собой двоичное представление шагов, необходимых для выполнения инструкции; это эквивалент исполняемого кода СУБД.
СУБД оптимизирует план доступа. В нем рассматриваются различные способы выполнения плана доступа. Можно ли использовать индекс для ускорения поиска? Следует ли СУБД сначала применить условие поиска к таблице A, а затем присоединить его к таблице B или начать с соединения и использовать условие поиска после этого? Можно ли избежать последовательного поиска по таблице или уменьшить их до подмножества таблицы? После изучения альтернативных вариантов СУБД выбирает один из них.
СУБД выполняет инструкцию, выполнив план доступа.
Действия, используемые для обработки инструкции SQL, зависят от объема доступа к базе данных, который требуется, и времени, которое требуется. Анализ инструкции SQL не требует доступа к базе данных и может выполняться очень быстро. С другой стороны, оптимизация является очень интенсивным процессом ЦП и требует доступа к системным каталогу. Для сложного многоразового запроса оптимизатор может изучить тысячи различных способов выполнения одного и того же запроса. Однако затраты на выполнение запроса неэффективно, как правило, высоки, что время, затраченное на оптимизацию, превышает увеличение скорости выполнения запроса. Это еще более важно, если один и тот же оптимизированный план доступа можно использовать для выполнения повторяющихся запросов.