Мы запускаем проект мульти витринный в котором подразумевается до 10 витрин, начали проводить нагрузочные тесты и сели в лужу не начав тестировать.
Суть в том что при загрузке списка товаров вызывается фильтр по категориям и тут все как говориться пропало. В магазине на момент теста было более 21865 категорий и 113146 товаров.
Админка вендора - список из четырех товаров грузится у вендора почти две секунды.
Проверка на заполненность не влияет, так как происходит после всех запросов и отрисовки админки “Товар не будет опубликован на витрине - Не заполнены характеристики - Добавьте в категорию маркетплейса”
А теперь самое сладкое, это админка АДМИНИСТРАТОРА и неважно сколько в пагинации стоит товаров, 50 или 250 суть единая запрос для каждого товара делает проверку на принадлежность к категории.
Если мы даже отключим все модули, то в скорости мы не сильно выиграем, так как тут остался только модуль изменения карточки товара, но по факту его запрос тут роли не играет.
Отключаем запрос с категориями и процесс упирается в скорость 0,14 секунды на список в 250 товаров и наличием в магазине 21000 категорий, 113146 товаров, а если мы сюда добавим что и БД mysl 8.0 то скорости она дает в разы больше, так как сама многие запросы оптимизирует, но не в этот раз.
Решение тут видится в том, чтобы добавить фильтр по категориям маркетплейса и вендора, а так же витринам. Тогда прирост будет существенный, так как этот же запрос работает на витрине с пагинацией в 128 товаров за 1,3 секунды. есть еще вариант перевести таблицу на InnoDB но тогда немного потеряем на скорости записи, но для поиска будет сильно ощутим прирост.
Если убрать чать запросов с витрины по картинками для меню, банерам и доп украшениям, то полетит как пуля.
Параметры mysl 8.0, php 8, если необходимо можем дать клона на поломать на случай если сами не сможете повторить