Скачиваний:
82
Добавлен:
02.05.2014
Размер:
2.28 Mб
Скачать

17.1. Введение

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

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

1. Хороший оптимизатор— обратите внимание на слово "хороший"!— обладает большим объемом полезной информации, которая пользователю обычно недоступ- на. Говоря конкретнее, оптимизатор владеет определенными статистическими данными, в частности перечисленными ниже:

* количество значений в каждом домене;

  • текущее количество значений в каждой базовой переменной-отношении;

  • текущее количество различающихся значений для каждого атрибута в базовой переменной-отношении;

  • количество вхождений каждого значения в каждом из атрибутов и т.п.

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

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

  2. Оптимизатор — это программа, которая по определению более "настойчива", чем человек. Оптимизатор способен рассматривать буквально сотни различных стратегий реализации конкретного запроса, в то время как программист едва ли проанализирует более трех-четырех возможных стратегий (по крайней мере, достаточно глубоко).

  3. В оптимизаторе реализованы знания и опыт "лучших из лучших" программистов, в результате чего эти знания и опыт становятся доступными для всех. Это позволяет применять ограниченный набор ресурсов, предоставленный широкому кругу поль- зователей, наиболее эффективно и экономично.

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

Общее назначение оптимизатора состоит в выборе наиболее эффективной стратегии вычисления реляционного выражения. В этой главе описаны некоторые фундаментальные принципы и методы, применяемые в процессе оптимизации. После обсуждения вступи- тельного примера, приведенного в разделе 17.2, в разделе 17.3 предложен обзор принципов работы оптимизатора. Затем, в разделе 17.4, обсуждается один из важнейших аспектов процедуры оптимизации — преобразование выражений (или переписывание запроса). Да- лее, в разделе 17.5, кратко излагается вопрос о статистических показателях базы данных. В разделе 17.6 дается более подробное описание одного из конкретных методов оптимиза- ции, известного как декомпозиция запросов. Затем, в разделе 17.7, обсуждается вопрос о том, как в действительности реализуются некоторые реляционные операторы (например, оператор JOIN), и кратко описывается использование рассматривавшихся в разделе 17.5 статистических показателей для вычисления стоимостных оценок. И наконец в разделе 17.8 приводится краткое резюме по всему материалу данной главы.

Еще одно вводное замечание. Достаточно часто на данную тему ссылаются, как на оптимизацию запросов. Однако подобный термин несколько неточен, поскольку выра- жение, которое нужно оптимизировать ("запрос"), на самом деле может формироваться в контексте, отличном от интерактивного опроса базы данных. В частности, оно может быть частью операции обновления, а не операции выборки, понимаемой под запросом. Более того, сам по себе термин оптимизация является несколько преувеличенным, так как не существует гарантий, что выбранная стратегия реализации действительно опти- мальна в любом понимании. На практике под "оптимизированной" стратегией реализа- ции обычно понимается несколько улучшенный вариант исходного не оптимизированно- го выражения. (Тем не менее в некоторых немногочисленных случаях можно вполне обоснованно утверждать, что выбранная стратегия реализации будет действительно оп- тимальной в определенном смысле [17.31].)

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]