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

Ускорение опенкарт 2.1 Нужно ускорить работу запроса


volchonok27

Recommended Posts

Привет всем. нужно помощь по оптимизации opencart 2.1, будет около 50000 товаров и 700 категорий. Нагрузил магазины тестовыми товарами около 60000 тысяч. И нужно по максу ускорить его работу. А первое что жалуется в журнале медленных запросов , такой запрос:

# Time: 160823 13:33:31
# User@Host: admin_moto[admin_moto] @ localhost []
# Query_time: 6.475727  Lock_time: 0.000153 Rows_sent: 0  Rows_examined: 3433933
SET timestamp=1471959211;
SELECT
`c`.`parent_id`,
`c`.`category_id`,`cd`.`name`,
(
 
SELECT
COUNT(DISTINCT `p`.`product_id`) AS total
FROM
`oc_product_to_category` AS `p2c`
INNER JOIN
`oc_product` AS `p`
ON
`p`.`product_id` = `p2c`.`product_id`
INNER JOIN
`oc_category_path` AS `cp`
ON
`cp`.`category_id` = `p2c`.`category_id`
 
INNER JOIN
`oc_product_to_store` AS `p2s`
ON
`p2s`.`product_id` = `p`.`product_id` AND `p2s`.`store_id` = 0
 
INNER JOIN
`oc_product_description` AS `pd`
ON
`pd`.`product_id` = `p`.`product_id` AND `pd`.`language_id` = 4
 
WHERE `p`.`date_available` <= NOW() AND `p`.`status` = '1' AND ((LCASE(`pd`.`name`) LIKE '%aaasimq%') OR LCASE(`p`.`model`) = 'aaasimq ' OR LCASE(`p`.`sku`) = 'aaasimq ' OR LCASE(`p`.`upc`) = 'aaasimq ' OR LCASE(`p`.`ean`) = 'aaasimq ' OR LCASE(`p`.`jan`) = 'aaasimq ' OR LCASE(`p`.`isbn`) = 'aaasimq ' OR LCASE(`p`.`mpn`) = 'aaasimq ' OR LCASE(`pd`.`tag`) LIKE '%aaasimq %') AND `cp`.`path_id` = `c`.`category_id`
 
) AS `aggregate`
FROM
`oc_category` AS `c`
INNER JOIN
`oc_category_description` AS `cd`
ON
`cd`.`category_id` = `c`.`category_id` AND `cd`.`language_id` = '4'
INNER JOIN
`oc_category_to_store` AS `c2s`
ON
`c`.`category_id` = `c2s`.`category_id` AND `c2s`.`store_id` = '0'
WHERE
`c`.`status` = '1' AND `c`.`parent_id` = 0
GROUP BY
`c`.`category_id`
HAVING
`aggregate` > 0
ORDER BY
`c`.`sort_order` ASC, `cd`.`name` ASC;
 
Нужно как-то оптимизировать его, это при поиске товара, и когда наверное нажимаешь его открыть , выполняется этот запрос. Думаю кому-то тоже это нужно, не только мне
Надіслати
Поділитися на інших сайтах


Это ж подсчет товаров. Отключите в админке.

Скорей всего это какой-то из фильтров

 

1. Потому что это не в стиле  OC ипользовать JOIN (INNER JOIN)

2. Наличие HAVING - фильтрует уже полученный ответ - что на больших данных значительно тормозит

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

порой недостаточно просто отключить в админке

 

ищите в файлах по коду

SELECT COUNT(DISTINCT `p`.`product_id`) AS total
смотрите что за модули к нему обращаются и обходите по-возможности
Надіслати
Поділитися на інших сайтах

 

порой недостаточно просто отключить в админке

 

ищите в файлах по коду

SELECT COUNT(DISTINCT `p`.`product_id`) AS total
смотрите что за модули к нему обращаются и обходите по-возможности

а как пагинация товаров тогда будет работать если закоментить подсчет товаров

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


для этого нужна полная оптимизация 

поможет snastik  https://opencartforum.com/user/7246-snastik/ 

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

WHERE `p`.`date_available` <= NOW() AND `p`.`status` = '1' AND ((LCASE(`pd`.`name`) LIKE '%aaasimq%') OR LCASE(`p`.`model`) = 'aaasimq ' OR LCASE(`p`.`sku`) = 'aaasimq ' OR LCASE(`p`.`upc`) = 'aaasimq ' OR LCASE(`p`.`ean`) = 'aaasimq ' OR LCASE(`p`.`jan`) = 'aaasimq ' OR LCASE(`p`.`isbn`) = 'aaasimq ' OR LCASE(`p`.`mpn`) = 'aaasimq ' OR LCASE(`pd`.`tag`) LIKE '%aaasimq %') AND `cp`.`path_id` = `c`.`category_id`

 

Это не запрос - это 3.14 производительности, Like %...% это перебор по всей базе без индексов а еще и OR, Having, Count, IJ и т п  - полный 3.14

 

Советовал бы разбить на простые данный запрос

Чаще получается куча простых выполняются во много раз быстрее одного сложного

Да и их легче оптимизировать при нагрузке и разделить по ресурсам

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

 + 5 копеек

`p`.`date_available` <= NOW() 

там вроде доступность в часах минутах секундах не задается, да и с вероятностью 62.471% даже не знает что это такое

AND `c2s`.`store_id` = '0'

с вероятностью 92.412% это не мультимагазин

OR LCASE(`p`.`sku`) = 'aaasimq ' OR LCASE(`p`.`upc`) = 'aaasimq ' OR LCASE(`p`.`ean`) = 'aaasimq ' OR LCASE(`p`.`jan`) = 'aaasimq ' OR LCASE(`p`.`isbn`) = 'aaasimq ' OR LCASE(`p`.`mpn`) = 'aaasimq ' OR LCASE(`pd`.`tag`) 

с вероятностью 98.245% проверки вхождений во всякие jan, mpn и т.д. не нужны

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

Это какой-то фильтр при поиске, типа найденные товары находятся в таких-то категориях

 

Как его оптимизировать - вопрос  - от потребностей.

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

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

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

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

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

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

Вхід

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

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

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

Important Information

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