Перейти к содержанию
seolink

медленные запросы, ускорил в 90 р правильно ли?

Рекомендуемые сообщения

На хостинге увидел медленные запросы по 35 секунд

SELECT COUNT(*) AS total, attribute_id, text FROM (SELECT DISTINCT p.product_id, p2a.attribute_id, p2a.text, COALESCE((SELECT price FROM oc_product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1), (SELECT price FROM oc_product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '1' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1), p.price) AS realprice FROM oc_product p LEFT JOIN oc_manufacturer m ON(m.manufacturer_id=p.manufacturer_id) LEFT JOIN oc_product_option_value pov ON (pov.product_id=p.product_id) LEFT JOIN oc_product_to_store p2s ON (p2s.product_id=p.product_id) LEFT JOIN oc_product_to_category p2c ON (p2c.product_id=p.product_id) LEFT JOIN oc_product_attribute p2a ON (p2a.product_id=p.product_id) WHERE 1 AND p2c.category_id IN (520) AND EXISTS (SELECT 1 FROM oc_product_attribute p2a0 WHERE p2a0.product_id = p2a.product_id AND p2a0.attribute_id = 166 AND (p2a0.text * 1 BETWEEN 85 AND 86)) AND p.price >=1 AND p.STATUS = '1' AND p.date_available <= NOW( ) AND p2a.language_id='1' AND p2s.store_id = 0) AS innertable WHERE 1 AND realprice >=1 AND realprice <=52992 GROUP BY attribute_id, text

Убрал индекс с attribute_id  и language_id (серый ключ)

В результате скорость обработки запроса увеличилась до 0,3сек

 

Результат изменений на скриншоте.

 

Подскажите правильное ли решение или лучше вернуть назад?

003.png

Изменено пользователем seolink

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Глянул, из коробки никаких доп индексов не стоит, только составной праймари, как у вас на скриншоте. А кто вам туда их поставил?

Изменено пользователем Gorman
  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответ.

Когда то давно сам делал запрос по статье

https://ocshop.info/tormozit-opencart-chast-2/

 

Если не сложно бросьте линк на файл (страницу) где можно глянуть все эти параметры (индексы , праймери и тд) по стандарту в коробке для перепроверки?

Изменено пользователем seolink

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня просто развернуты все версии опенкарта на локалке, для тестов - там и смотрю "значения по умолчанию" :)
Вообще поглядывайте на медленные запросы и впредь. В этом запросе, если реально так отличается время (разница нереальная на самом деле, надо еще проверить будет),  лишние индексы сыграли какую-то негативную роль. Какую - сказать затрудняюсь, запрос сам разобрать - надо времени конечно потратить уйму и быть большим спецом в SQL - если есть такие, то подскажут, тоже будет интересно послушать. 

По EXPLAIN-у запроса с доп индексами  видно, что праймари используется не на всю катушку. Учитывая, что в запросе все части PK используются - конкретно этому запрос доп индекс не нужен.

Но вот если какой-то запрос будет касаться только одного столбца (attribute_id, language_id), то тогда индекс должен выручить. Хороший вопрос - дергаются ли эти данные, учитывая что они втроем уже в составном праймари. Я лично не отвечу :)
 

Изменено пользователем Gorman
  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.