Главная » SQL, Базы данных » ОПТИМИЗАЦИЯ БД ПРИМЕРЫ

0

Как было описано в разделе 3.2, все реляционные операции, такие как сокращение, проекция и соединение, выполняются на уровне множеств. Поэтому реляционные языки часто называют непроцедурными, так как пользователь  указывает, что делать, а не как делать. Фактически пользователь сообщает лишь, что ему нужно, без указания процедуры получения результата. Процесс навигации (перемещения) по хранимой базе данных в целях удовлетворения запроса пользователя выполняется системой автоматически, а не пользователем  вручную.  Поэтому  реляционные  системы  иногда  называют  системами автоматической навигации. В нереляционных системах за навигацию по базе данных в основном несет ответственность сам пользователь. На рис. 3.5 приведена яркая иллюстрация преимуществ автоматической навигации — оператору языка SQL INSERT  противопоставлен  код  навигации,  подготовленный  "вручную".  Для  получения  того  же результата подобный код, вероятно, должен быть подготовлен пользователем любой нереляционной системы (в данном случае — сетевой системы CODASYL; пример взят из главы по сетевым базам данных в [1.5]). Следует отметить, что здесь в качестве примера снова используется база данных деталей и поставщиков. За подробностями обратитесь к разделу 3.9.

Несмотря на предыдущие замечания, следует отметить, что непроцедурный — это хотя и общепринятый, но не совсем точный термин, потому что процедурный и непроцедурный — понятия относительные. Обычно можно с уверенностью определить лишь то, является ли язык А более (или менее) процедурным, чем язык Б. Поэтому точнее будет сказать, что реляционные языки, такие как SQL, характеризуются более высоким уровнем абстракции, чем типичные языки программирования, подобные C++ или COBOL (либо подъязыки данных,  обычно  принадлежащие нереляционным СУБД; см. рис. 3.5). В принципе, именно более высокий уровень абстракции способствует повышению  продуктивности труда программистов, свойственному для реляционных систем.

Ответственность за организацию выполнения автоматической навигации возложена на очень важный компонент СУБД — оптимизатор (мы уже упоминали о нем в главе 2). Другими словами, работа оптимизатора заключается в том, чтобы выбрать самый эффективный способ выполнения для каждого запроса пользователя. Предположим, например, что пользователь сделал следующий запрос (снова воспользуемся языком Tutorial D).

( EMP WHERE ЕМР# = ЕМР# (‘Е4′) ) { SALARY }

Пояснение. Выражение в первых скобках (EMP WHERE …) означает, что применяется операция сокращения текущего значения переменной отношения ЕМР, касающаяся той строки, в которой значение столбца ЕМР# равно Е4. Применяемая здесь языковая конструкция, представляющая собой имя столбца  SALARY, заключенное в фигурные скобки, означает проекцию результата операции сокращения по столбцу SALARY. Результатом этой операции проекции становится отношение, состоящее из одного столбца и одной строки, которое содержит данные о заработке служащего Е4. (Обратите внимание, что в данном случае в неявном виде используется реляционное свойство замкнутости: мы написали вложенное выражение, в котором результат операции сокращения применяется в качестве входных данных для операции проекции.)

Рис. 3.5. Примеры автоматической навигации и навигации вручную

Даже в этом простом примере могут применяться по крайней мере два способа доступа к необходимым данным.

Последовательный физический просмотр (хранимой версии) переменной отношения ЕМР, пока требуемая запись не будет найдена.

1.  Если есть индекс для столбца ЕМР# (в хранимой версии) переменной отношения (который, вероятно, действительно существует, поскольку этот столбец является уникальным, а большинство систем фактически требует создания индекса для обеспечения уникальности), то переход с помощью этого индекса непосредствен но к данным служащего с номером Е4.

Оптимизатор    определит,    какую    из    двух    возможных    стратегий    следует применить. В общем случае для реализации любого конкретного реляционного запроса оптимизатор будет осуществлять выбор стратегии, исходя  из соображений, подобных следующим:

■     на какие переменные отношения есть ссылки в запросе;

■     насколько велики эти переменные отношения в настоящее время;

■     какие существуют индексы;

■     насколько избирательны эти индексы;

■     как физически группируются данные на диске;

■     какие реляционные операции используются; и т.д.

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

Более подробные сведения об оптимизаторе приводятся в главе 18.

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии