Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

медленные запросы, ускорил в 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

Змінено користувачем seolink
Надіслати
Поділитися на інших сайтах


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

Змінено користувачем Gorman
  • +1 1
Надіслати
Поділитися на інших сайтах

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

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

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

 

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

Змінено користувачем seolink
Надіслати
Поділитися на інших сайтах


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

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

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

Змінено користувачем Gorman
  • +1 1
Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.