Оптимизация запросов MySQL
Немаловажный фактор в продвижении сайта - его быстродействие. Один из факторов который значительно может снизить быстродейтсвие - не оптимизированные запросы к MySQL. Допустим простой запрос:
Select a.*, b.*, c.*, d.* From a, b, c, d WHERE d.c_id=c.id and c.b_id=b.id and b.a_id=a.id
Казалось бы совсем простой запрос и с этим можно согласиться, если количество записей в каждой из таблиц невелико. Ведь получается что все таблицы поочередно перемножаются, а объем данных которые приходится выбираться MySQL значительно увеличивается!
Для оптимизации данного запроса можно использовать следующее выражение A LEFT JOIN B
Пример того же запроса с использованием Left Join:
Select a.*, b.*, c.*, d.* From a
Left Join b on a.id=b.a_id
Left Join c on b.id=c.b_id
Left Join d on c.id=d.c_id
Что при этом происходит?
Если при использовании Where на каждую строку в основной таблице(А) искалось соответсвие в таблице B, то с использованием Left Join все происходит несколько по иному алгоритму - каждая из таблиц последовательно перемножается с небходимой по условию после оператора ON, что значительно ускоряет быстродейтсвие данного запроса.
Еще один плюс данного метода состоит в том, что с помощью одного запроса на странице можно выбрать все необходимые данные. То есть время необходимое на подключение mysql_query, если использовалось бы Where, значительно уменьшается.
Из своего опыта могу сказать, что разобравшись с методикой работы Left Join и Inner Join, использовать Where приходится только в тех редких случаях, когда выборки происходят из одной таблицы.
Похожие посты:
7 Комментов к “Оптимизация запросов MySQL”
Оставить коммент
Donation Bar
- Как сюда попасть
- Обзор бирж ссылок на SEOadd.ru (30$)
- BestMasterиZация (10$)
- Dofollow блог (6.5$)
- Партнерки на подписках (6.1$)
- BestMasterиZация (6$)
Order Links
Топ комментаторов
- No commentators.

Опубликовал cross в
Гармонь :
Спасибо, попробую это на практике. В любом случае спасибо!
Маслов Алекс :
Ну а если выкидывает ощибку аксес виолотион by 2345345 . Что это значит?
cross :
Я бы согласился подробнее посмотреть на ошибку, но судя по всему access violation – означает, что данные для подключения к базе данных неверные, тоесть подключения не происходит. Вот он и говорит об ограничении доступа к базе MySQL.
Пользователям FireFox посвящается! | cross{blog} :
[...] исполнение длинных SQL-запросов [...]
maxon :
У меня с 6 секунд время увеличилось до 11. 4 таблицы.
cross :
Напиши запрос. Даже теоретически я не могу представить, что ты такое написал, что время увеличилось
Можно только одно сказать – написал не правильно, ведь данный метод наоборот снижает время выборки за счет уменьшения количества переборов в таблицах.
Сашкинг :
надо будет попробовать… рахмет!