Заявка на участие в семинаре

Все поля обязательные для заполнения
Как к Вам обращаться
Email
Телефон
Семинар
Комментарий
отправить
закрыть

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

Уральская академия современных информационных технологий Оптимизация запросов MySQL
Дата публикации: 19.01.2015 13:28:28
Автор статьи: Андрейчиков Юрий, программист отдела разработки УрАИТ


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

  

рис. 1

Запрос к базе дпнных будет примерно таким:

SELECT 
su.id AS id, su.name AS name, su.surname AS surname, su.name2 AS name2, su.foto AS foto, su.site AS site, gr.name AS group_name
FROM
group_user AS gu,
user AS su,
group AS gr
WHERE 
gu.groupId='".$group_id."' AND gu.userId=su.id AND gu.groupId=gr.id
ORDER BY su.is_user DESC, su.surname ASC, su.name ASC, su.name2 ASC

Таким образом вместо того, чтобы сделать выборку по группам (мы ведь открываем конкретную группу), затем выбрать пользователей группы, а затем извлечь данные для каждого пользователя, мы делаем выборку одним запросом. Причем обратите внимание, что нет такой инструкции SELECT * FROM. Ведь у нас много полей, а нам нужны только конкретные поля.

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

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

Самая простая аналогия с индексами - это библиотека, в библиотеке книжки отсортированы по алфавиту, алфавит в данном случае и есть индекс.

В нашем запросе нужно поставить индекс на поля gu.userId и gu.groupId. Делаем это так как изображено на рис.2

рис.2

После этого запрос будет выполняться в разы быстрее.

Второй этап оптимизации - индексы на необходимых полях.

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

Адрес сайта проекта: http://doit0.ru

Если Вас заинтересовала данная статья и Вы бы хотели научиться делать проекты такого уровня, то приглашаем Вас на наши курсы, которые будет вести Андрейчиков Юрий Сергеевич, сертифицированный программист 1с-битрикс.



Назад в раздел