Есть у магазина нерешённые проблемы со скоростью, в частности излишней нормализованности базы данных и лишних завпросов и подзапросов, мы их немного опишем и будем надеятся на исправление в новых версиях.
У меня много продуктов и скорость выполнения заметна хорошо, включим лог mysql для медленных запросов.
На главной странице магазина выполняется запрос
SELECT * FROM `shop_items_catalog_table`
WHERE shop_items_catalog_table.shop_items_catalog_is_active = '1'
AND `shop_items_catalog_modification_id` IN (158,159)
ORDER BY shop_items_catalog_order Asc, shop_items_catalog_name Asc;
Суть его я не понял. Выполняется 4 с лишним секунды.
Добавляем индекс (это может сделать любой пользователь с версией до 5.6.0 включтельно, возможно в след. исправят):
alter table shop_items_catalog_table add index (shop_items_catalog_modification_id);
Выполняется теперь 0.007 секунды. Где он был до этого?
Идём дальше.
В корне моего магазина 5 групп, остальные ветвятся многими и многими ветками.
В момент формирования страницы с 5-ю группами выполняется 5 раз следующий запрос, по разу на каждую группу.
Возвращает он все группы с подсчитываеммым для каждой группы кол. товаров. Замечу, групп у меня 549, а товаров 55496.
Этот запрос окучивает 55476 строк с условиями выборки по дате и, до добавления индекса,
фильтром по неиндексируемому полю shop_items_catalog_modification_id,
складвает результат во временный файл для группировки и подсчёта количества товаров в группе,
и возващает результат (группа, кол. товаров) из 549 строк.
Во-первых непонятно как он может испкользоваться на одном, верхнем, уровне групп в магазине.
А во-втрорых самое непонятное, зачем он выполняется 5 раз, кратно количеству групп в тек. ветке.
SELECT shop_groups_id, count(shop_items_catalog_table.shop_items_catalog_item_id) as count
FROM `shop_items_catalog_table`
WHERE `shop_shops_id` = '9'
AND `shop_items_catalog_modification_id` = 0
AND shop_items_catalog_table.shop_items_catalog_is_active = '1' AND (shop_items_catalog_table.shop_items_catalog_putend_date >= '2009-05-14 07:31:40'
OR shop_items_catalog_table.shop_items_catalog_putend_date ='0000-00-00 00:00:00') AND shop_items_catalog_table.shop_items_catalog_putoff_date <= '2009-05-14 07:31:40'
GROUP BY shop_groups_id;
Выполняется 3.7160 сек. итого 18,58 секунд только для верхнего уровня.
Во внутреннюю группу я не могу "попасть", потому, что там больше подгрупп и такой запрос выполняется для каждой, таким образом я не могу дождаться их выполнения до истечения лимита времени на запрос у апача. А главное не понятно как он может быть полезен на странице магазина.
Прошу пересмотреть отношение к тестированию продукта и исправить эти проблемы в новых версиях.
С наилучшими пожеланиями,
желающий помогать и возможно будущий пользователь HostCMS.