Форум русской поддержки Joomla!® CMS
28.07.2017, 19:01:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Основной курс по Joomla
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Как оптимизировать запрос?

 (Прочитано 176 раз)
0 Пользователей и 1 Гость смотрят эту тему.
stydent
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 141


« : 10.07.2017, 21:27:10 »

Хостер жалуется на мои запросы, грозит блокировками.
Цитировать
Необходимо либо добавить необходимые индексы для использования в этом запросе, либо исключить необходимость перебора 15846 строк при его выполнении.

Мой зарос такой
Код:
SELECT * FROM `jos_virtuemart_product_custom_plg_param_ref` as r LEFT JOIN `jos_virtuemart_product_custom_plg_param_values` as v ON v.id = r.val WHERE r.virtuemart_product_id = 4983 AND r.virtuemart_custom_id = 22
Отображение строк 0 - 0 (1 всего, Запрос занял 0.0029 сек.)
Вроде быстро, на что он жалуется?
Записан
robert
Профи
********

Репутация: +380/-14
Offline Offline

Пол: Мужской
Сообщений: 4166


« Ответ #1 : 10.07.2017, 22:06:17 »

В чем смысл использовать LEFT JOIN в вашем запросе?
А так, хостер прав на счет индексирования: быстро-небыстро, а ресурс на перебор 15846 строк нужен.
Записан
stydent
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 141


« Ответ #2 : 11.07.2017, 00:15:12 »

В чем смысл использовать LEFT JOIN в вашем запросе?

Получаю значение одного столбца из второй таблицы
Записан
Филипп Сорокин
Практически профи
*******

Репутация: +138/-4
Offline Offline

Пол: Мужской
Сообщений: 1807


« Ответ #3 : 11.07.2017, 04:30:40 »

Индексы расставьте - будет все летать. А вообще в плане оптимизации надо делать акцент на серверный кэш MySQL - замечательная штука, позволяющая жонглировать глыбами данных без особого напряга.
Записан
stydent
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 141


« Ответ #4 : 11.07.2017, 11:01:11 »

Индексы расставьте - будет все летать.
что надо сделать: запрос изменить или в таблице что то?
Записан
Филипп Сорокин
Практически профи
*******

Репутация: +138/-4
Offline Offline

Пол: Мужской
Сообщений: 1807


« Ответ #5 : 11.07.2017, 11:30:36 »

что надо сделать: запрос изменить или в таблице что то?
Для начала неплохо бы теорию без данных изучить. Смотрите поля, по которым идёт сравнение. Если поля являются primary key, то они уже проиндексированы, если нет, то индексы нужно расставить вручную. Не ручаюсь за достоверность, но чаще всего поля id являются PK, не знаю как у вас. В одной таблице id для join может быть pk, в другой таблице нет. Думаю, что r.val точно не pk и не имеет индексов. Посмотрите какие индексы есть вообще.

Код:
SELECT DISTINCT
    TABLE_NAME,
    INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'имя базы';
Записан
stydent
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 141


« Ответ #6 : 11.07.2017, 12:13:14 »

Посмотрите какие индексы есть вообще.

у обоих таблиц индексы id
Записан
Филипп Сорокин
Практически профи
*******

Репутация: +138/-4
Offline Offline

Пол: Мужской
Сообщений: 1807


« Ответ #7 : 11.07.2017, 12:15:01 »

Какой ID, там их куча:

Цитировать
id
virtuemart_product_id
virtuemart_custom_id
Записан
stydent
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 141


« Ответ #8 : 11.07.2017, 12:17:52 »

Какой ID, там их куча:


id
Записан
Филипп Сорокин
Практически профи
*******

Репутация: +138/-4
Offline Offline

Пол: Мужской
Сообщений: 1807


« Ответ #9 : 11.07.2017, 12:20:06 »

Ну вот, соответственно надо расставить индексы на поля, где их нет. Все поля, которые участвуют в склейке таблиц или фильтрации должны быть проиндексированы во всех таблицах.
Записан
stydent
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 141


« Ответ #10 : 11.07.2017, 12:27:04 »

Расставил. Переиндексация со временем пройдет?
Записан
Филипп Сорокин
Практически профи
*******

Репутация: +138/-4
Offline Offline

Пол: Мужской
Сообщений: 1807


« Ответ #11 : 11.07.2017, 12:29:24 »

Расставил. Переиндексация со временем пройдет?

При каждом обновлении будет происходить переиндексация -- это главный её недостаток, т.к. на переиндексацию тоже нужны ресурсы, и если база часто обновляется, то она будет тормозить. Хотя 99 процентов схемат работает на выдачу и лишь изредка на обновление. Всё зависит от ситуации Azn
Записан
stydent
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 141


« Ответ #12 : 11.07.2017, 12:31:06 »

А кто то можно посмотреть сколько ресурсов тратиться?
Записан
Филипп Сорокин
Практически профи
*******

Репутация: +138/-4
Offline Offline

Пол: Мужской
Сообщений: 1807


« Ответ #13 : 11.07.2017, 12:40:49 »

А кто то можно посмотреть сколько ресурсов тратиться?

Только если логи запросов изучить за последний месяц, например. Посмотреть статистику по расходованию ресурсов, сравнить временные метки. Профилирование -- это очень широкое понятие, тут единого рецепта нет.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet