Оптимизация в базах данных


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

Оптимизация может зависеть от многих факторов, которые условно можно разделить на 3 группы:
1) оптимизация структуры базы данных (нормализация базы данных): см. в 5-ой лекции или Дейта;
2) оптимизация запросов: в каждой базе данных есть в той или иной мере хороший автоматический оптимизатор), переделывает написанный вами запрос, так чтобы этот запрос выполнялся быстрее), который работает лучше человека, т.к. во-первых, несмотря на то, что в жизни встречаются специалисты, которые могут написать запрос лучше, чем оптимизатор, таких специалистов единицы, обычные люди не могут сразу написать хороший запрос, во-вторых, программа в отличие от человека не устает, в-третьих, программа в состоянии передрать большее число вариантов, чем человек, в-четвёртых, у программы есть доступ к дополнительной информации (статистика, которая в отличие от индексов собирается периодически), до которой человек не может добраться или не может её обработать за достаточно короткий срок и сделать правильные выводы. Оптимизатор в любом случае даст хороший вариант запроса;
3) оптимизация приложений.

Обзор процессов оптимизации
Фактически сам процесс оптимизации проходит в 4 этапа:
1) преобразование написанного вами запроса во внутреннюю форму. При составление запроса можно использовать операторные диапазоны. (например: A between A1 and A2, как правило такого рода «between» он меняет на «<» « >»; или «in»-попадание во множество, он его тоже разделяет на части «=»тому-то, «=»тому-то и т.п.) Он преобразует некоторые операторы на уровень «and» и «or», чтобы потом заняться преобразование этих логических выражений (начинаются логические скреки).

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

3) выбирается потенциально низкоуровневая процедура для выполнения запроса, т.е. из канонической формы преобразуется в использование низкоуровневых процедур и функций, используемых в языке. (интерпретируемый язык преобразуется в исполняемый язык). Составляется текст запроса с учетом путей доступа, выбирается тот или иной индекс (здесь оптимизатор пользуется статистикой размещения данных на диске).

4) генерируется и выполняется план.
Подбор низких процедур и план выполнения происходит на основе некоторых критериев, которые будут рассмотрены в следующем посте.

Оптимизация приложений
Производительность работы существенно зависит и от приложения.

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


Комментарии запрещены.




Статистика