Web Programming - Computer Science for Business Leaders 2016

Опубликовано: 29.06.2017


Оптимизация - это изменение системы с целью увеличения ее быстродействия.

Оптимизацию работы с БД можно поделить на 3 типа:

• оптимизация запросов
• оптимизация структуры
• оптимизация сервера.

Разглядим подробнее оптимизацию запросов. Оптимизация запросов - более обычный и приводящий к более высочайшим результатам тип оптимизации.

 


Web Programming - Computer Science for Business Leaders 2016

Запросами, которые в большинстве случаев поддаются оптимизации, являются запросы на подборку. Для того чтоб поглядеть как будет производиться запрос на подборку употребляется оператор EXPLAIN: http://www.mysql.com/doc/ru/EXPLAIN.N.html

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

То вам необходимо проставить индекс на поле field1, если вы используете в выборке условие по двум полям:

То вам необходимо сделать составной индекс на поля field1, field2. Если вы используете соединение 2 либо более таблиц:

Либо в более общем виде:

То вам следует сделать индексы по полям, по которым будут присоединятся таблицы. В этом случае это поля b.id и c.id. Но это утверждение правильно исключительно в том случае, если подборка будет происходить в том порядке, в каком они перечислены в запросе. Если, например, оптимизатор MySQL будет выбирать записи из таблиц в последующем порядке: c,b,a, то необходимо будет проставить индексы по полям: b.c_id и a.b_id.

При связывании при помощи LEFT JOIN таблица, которая идет в запросе слева, всегда будет просматриваться первой.

Про синтаксис сотворения индексов можно прочесть в документации: http://www.mysql.com/doc/ru/CREATE_INDEX.html.

Более тщательно про использовании индексов можно прочесть тут: http://www.mysql.com/doc/ru/MySQL_indexes.html.

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

В таких случаях может быть разумным вынести эту часть в отдельную временную таблицу: