Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

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


Recommended Posts

На хостинге увидел медленные запросы по 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

Edited by seolink
Link to post
Share on other sites

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

Edited by Gorman
  • +1 1
Link to post
Share on other sites

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

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

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

 

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

Edited by seolink
Link to post
Share on other sites

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

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

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

Edited by Gorman
  • +1 1
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.