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

Posted Опубликовал cross в Разработка сайтов     Comments 7 comments
Март
4

Немаловажный фактор в продвижении сайта - его быстродействие. Один из факторов который значительно может снизить быстродейтсвие - не оптимизированные запросы к 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 приходится только в тех редких случаях, когда выборки происходят из одной таблицы.

Похожие посты:

  1. Оптимизация сайтов, раскрутка, SEO-оптимизация
  2. PHP+Apache+MySql
  3. Ajax и кодировка запросов
  4. MySQL импорт
  5. MySQL BackUp/Restore. Чит-лист

7 Комментов к “Оптимизация запросов MySQL”

  • Спасибо, попробую это на практике. В любом случае спасибо!

  • Ну а если выкидывает ощибку аксес виолотион by 2345345 . Что это значит?

  • Я бы согласился подробнее посмотреть на ошибку, но судя по всему access violation – означает, что данные для подключения к базе данных неверные, тоесть подключения не происходит. Вот он и говорит об ограничении доступа к базе MySQL.

  • [...] исполнение длинных SQL-запросов [...]

  • У меня с 6 секунд время увеличилось до 11. 4 таблицы.

  • Напиши запрос. Даже теоретически я не могу представить, что ты такое написал, что время увеличилось :) Можно только одно сказать – написал не правильно, ведь данный метод наоборот снижает время выборки за счет уменьшения количества переборов в таблицах.

  • надо будет попробовать… рахмет!

Оставить коммент

Donation Bar

Order Links

Топ комментаторов

  • No commentators.