Язык SQL, как мы уже видели, предназначен для организации доступа к базам данных.
При этом предполагается, что доступ к БД может быть осуществлен в двух режимах:
в интерактивном режиме и в режиме выполнения прикладных программ (приложений).
Эта двойственность
SQL создает ряд преимуществ:
Все возможности интерактивного
языка запросов доступны и в прикладном программировании.
Можно в интерактивном
режиме отладить основные алгоритмы обработки информации, которые в дальнейшем
могут быть готовыми вставлены в работающие приложения.
SQL действительно
является языком по работе с базами данных, но в явном виде он не является языком
программирования. В нем отсутствуют традиционные операторы, организующие циклы,
позволяющие объявить и использовать внутренние переменные, организовать анализ
некоторых условий и возможность изменения хода программы в зависимости от выполненного
условия. В общем случае можно назвать SQL подъязыком, который служит исключительно
для управления базами данных. Для создания приложений, настоящих программ необходимо
использовать другие, базовые языки программирования, в которые операторы языка
SQL будут встраиваться.
Базовыми
языками программирования могут быть языки С++, COBOL, PL/1, Pascal, PHP, Java. Существуют
два способа применения SQL в прикладных программах:
Встроенный SQL.
При таком подходе операторы SQL встраиваются непосредственно в исходный
текст программы на базовом языке. При компиляции программы со встроенными
операторами SQL используется специальный препроцессор SQL, который преобразует
исходный текст в исполняемую программу.
Интерфейс программирования
приложений (API application program interface). При использовании данного
метода прикладная программа взаимодействует с СУБД путем применения специальных
функций. Вызывая эти функции, программа передает СУБД операторы SQL и получает
обратно результаты запросов. В этом случае не требуется специализированный
препроцессор.
Процесс выполнения
операторов SQL может быть условно разделен на 5 этапов (см. рис. 12.1).
Рис.
12.1. Процесс выполнения операторов SQL
На первом этапе выполняется
синтаксический анализ оператора SQL. На этом этапе проверяется корректность
записи SQL-оператора в соответствии с правилами синтаксиса.
На этом этапе проверяется
корректность параметров оператора SQL: имен отношений, имен полей данных,
привилегий пользователя по работе с указанными объектами. Здесь обнаруживаются
семантические ошибки.
На этом этапе проводится
оптимизация запроса. СУБД проводит разделение целостного запроса на ряд минимальных
операций и оптимизирует последовательность их выполнения с точки зрения стоимости
выполнения запроса. На этом этапе строится несколько планов выполнения запроса
и выбирается из них один — оптимальный для данного состояния БД.
На четвертом этапе
СУБД генерирует двоичную версию оптимального плана запроса, подготовленного
на этапе 3. Двоичный план выполнения запроса в СУБД фактически является эквивалентом
объектного кода программы.
И наконец, только
на пятом этапе СУБД реализует (выполняет) разработанный план, тем самым выполняя
оператор SQL.
Следует отметить, что перечисленные этапы отличаются по числу обращений к БД и по процессорному
времени, требуемому для их выполнения. Синтаксический анализ проводится очень
быстро, он не требует обращения к системным каталогам БД. Семантический анализ
уже требует работы с базой мета-данных, то есть с системными каталогами БД,
поэтому при выполнении этого этапа происходит обращение к системному каталогу
и серьезная работа с ним. Этап, связанный с оптимизаций плана запроса, требует
работы не только с системным каталогом, но и со статистической информацией
о БД, которая характеризует текущее состояние всех отношений, используемых
в запросе, их физическое расположение на страницах и сегментах внешней памяти.
В силу указанных причин этап оптимизации наиболее трудоемкий и длительный
в процессе выполнения запроса. Однако если не проводить этап оптимизации,
то стоимость (время) выполнения неоптимизированного запроса может в несколько
раз превысить стоимость оптимизированного запроса. Время, потраченное на оптимизацию
запроса, с лихвой компенсирует затраты на выполнение неоптимизированного запроса.
Этапы выполнения операторов SQL одни и те же как в интерактивном режиме, так и внутри приложений.
Однако при работе с готовым приложением многие этапы СУБД может выполнить заранее.
Знаете ли Вы, что такое "Большой Взрыв"? Согласно рупору релятивистской идеологии Википедии "Большой взрыв (англ. Big Bang) - это космологическая модель, описывающая раннее развитие Вселенной, а именно - начало расширения Вселенной, перед которым Вселенная находилась в сингулярном состоянии. Обычно сейчас автоматически сочетают теорию Большого взрыва и модель горячей Вселенной, но эти концепции независимы и исторически существовало также представление о холодной начальной Вселенной вблизи Большого взрыва. Именно сочетание теории Большого взрыва с теорией горячей Вселенной, подкрепляемое существованием реликтового излучения..." В этой тираде количество нонсенсов (бессмыслиц) больше, чем количество предложений, иначе просто трудно запутать сознание обывателя до такой степени, чтобы он поверил в эту ахинею. На самом деле взорваться что-либо может только в уже имеющемся пространстве. Без этого никакого взрыва в принципе быть не может, так как "взрыв" - понятие, применимое только внутри уже имеющегося пространства. А раз так, то есть, если пространство вселенной уже было до БВ, то БВ не может быть началом Вселенной в принципе. Это во-первых. Во-вторых, Вселенная - это не обычный конечный объект с границами, это сама бесконечность во времени и пространстве. У нее нет начала и конца, а также пространственных границ уже по ее определению: она есть всё (потому и называется Вселенной). В третьих, фраза "представление о холодной начальной Вселенной вблизи Большого взрыва" тоже есть сплошной нонсенс. Что могло быть "вблизи Большого взрыва", если самой Вселенной там еще не было? Подробнее читайте в FAQ по эфирной физике.