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

Recommended Posts

Всем привет. Уважаемые форумчане помогите разобраться. Вот такие медленые запросы как от них избавиться. Спасибо.

 

Запрос 1.

SELECT a.attribute_group_id AS group_id, av.attribute_id AS attr_id, av.attribute_value_id AS val_id, agd.name AS group_name, ad.name AS attr_name, av.value FROM `oc_bf_aggregate_filters` AS af INNERJOIN ( SELECT p.* FROM `oc_product` AS p INNER JOIN `oc_product_to_category` AS p2c ON(p.product_id = p2c.product_id) INNER JOIN `oc_category_path` AS cp ON (cp.category_id = p2c.category_id) WHERE cp.path_id = '11') AS p ON (af.product_id = p.product_id) INNER JOIN`oc_bf_attribute_value` AS av ON (af.value = av.attribute_value_id) INNER JOIN `oc_attribute` AS a ON(a.attribute_id = av.attribute_id) INNER JOIN `oc_attribute_description` AS ad ON (ad.attribute_id = a.attribute_id) INNER JOIN `oc_attribute_group` AS ag ON (ag.attribute_group_id = a.attribute_group_id)INNER JOIN `oc_attribute_group_description` AS agd ON (agd.attribute_group_id = a.attribute_group_id)INNER JOIN `oc_product_to_store` AS ps ON (p.product_id = ps.product_id) WHERE agd.language_id ='2' AND ad.language_id = '2' AND av.language_id = '2' AND ps.store_id = '0' AND af.type = 'ATTRIBUTE'GROUP BY av.attribute_value_id ORDER BY ag.sort_order, ag.attribute_group_id, a.sort_order, ad.name, av.sort_order, av.value

 

Запрос 2.

SELECT p.product_id, (SELECT AVG(rating) AS total FROM oc_review r1 WHERE r1.product_id = p.product_id AND r1.STATUS = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROMoc_product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' ANDpd2.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) ASdiscount, (SELECT price FROM oc_product_special ps WHERE ps.product_id = p.product_id ANDps.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 LIMIT1) AS special FROM oc_product p LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) WHEREpd.language_id = '2' AND p.STATUS = '1' AND p.date_available <= NOW() AND p2s.store_id = '0'GROUP BY p.product_id ORDER BY p.date_added DESCLCASE(pd.name) DESC LIMIT 0,4

 

Запрос 3.

INSERT IGNORE INTO `oc_bf_aggregate_filters` (type,group_id,product_id,value) SELECT 'ATTRIBUTE', av.attribute_id, product_id, attribute_value_id FROM `oc_bf_tmp` AS pa LEFT JOIN`oc_bf_attribute_value` AS av ON (pa.value = av.value AND av.language_id = pa.language_id ANDav.attribute_id = pa.attribute_id) WHERE av.value IS NOT NULL

 

Надіслати
Поділитися на інших сайтах


Доброго времени, 1 и 3 запрос - это нестандартные для опенкарта запросы и вероятно, что вызываются каким то модулем, вот 2-й запрос - это стандартный метой "вытяжки" данных по конкретному product_id, но он не полный, можно его оптимизировать, всё зависит от того, какие данные по товару в магазине используются и стоят ли заглушки, если оптимизируется запрос и где то будет пропущена стандартная переменная, напремер по вызову рейтинга , что в свою очередь - вызовет ошибку.

Надіслати
Поділитися на інших сайтах

Надо конкретно на вашем сайте изучать вопрос. Самое простое - смотреть в сторону добавления индексов в таблицы.

Это надо смотреть в БД

Надіслати
Поділитися на інших сайтах

По 2 запросу - не совсем понятно, это запрос - получить 4 последних (новых) товара, т.е. это модуль (последние)

Почему он медленный...

надо смотреть

 

По 1

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

Этот запрос нужно ПЕРЕПИСАТЬ

 

например

....

INNER JOIN `oc_attribute_description` AS ad ON (ad.attribute_id = a.attribute_id) AND ad.language_id = '2'
INNER JOIN `oc_attribute_group` AS ag ON (ag.attribute_group_id = a.attribute_group_id) AND av.language_id = '2'
INNER JOIN `oc_attribute_group_description` AS agd ON (agd.attribute_group_id = a.attribute_group_id) agd.language_id ='2'
INNER JOIN `oc_product_to_store` AS ps ON (p.product_id = ps.product_id) AND ps.store_id = '0'
WHERE

....

 

Посмотреть по индексам , где надо добавить.
 

 

 

 

 

и 3

Это запрос - подготавливается временная таблица (только на каком этапе... или в админке или в магазине) это нужно смотреть модуль фильтра

 

 

Brainy Filter?

Надіслати
Поділитися на інших сайтах

  • 1 month later...

база большая у вас ? сколько позиций в product, product_option_value, product_attribute и product_to_category ?

product 2250, product_option_value 4470, product_attribute 27870,  product_to_category 4890

Надіслати
Поділитися на інших сайтах


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

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

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

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

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

Вхід

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

Вхід зараз
×
×
  • Створити...

Important Information

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