Оптимизация запросов

Для реляционных систем оптимизация является как проблемой, так и возможностью повышения производительности.

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

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

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

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

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

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

3) Оптимизатор способен рассматривать сотни различных стратегий реализации запроса, в то время как программист, как правило, изучает всего три–четыре. Назначение оптимизатора состоит в выборе эффективной стратегии реализации запросов. На практике оптимизированной стратегией обычно считается та, которая является некоторым улучшением исходной стратегии выполнения запроса.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: