esistema1 Опубликовано 9 октября, 2020 Жалоба Поделиться Опубликовано 9 октября, 2020 (изменено) Добрый день! Делаю отдельную страницу сезонных товаров и внутри нее категории в которых есть эти товары . Написал вот такой запрос: SELECT c.id, c.parent_id, c.name, c.url, p.id AS a FROM s_categories AS c LEFT JOIN s_products_categories AS pc ON pc.category_id = c.id LEFT JOIN s_products AS p ON p.id = pc.product_id LEFT JOIN s_variants AS v ON v.product_id = pc.product_id LEFT JOIN s_options AS o ON o.product_id = p.id WHERE v.stock > 0 AND o.feature_id = '95' AND o.value LIKE '%осень%' OR o.value LIKE '%мульти%' GROUP BY c.id Он сейчас выполняется 2 секунды, подскажите пожалуйста, как можно его ускорить? Изменено 9 октября, 2020 пользователем esistema1 Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 9 октября, 2020 Жалоба Поделиться Опубликовано 9 октября, 2020 Ускорить - практически никак. Формально можно 1) переходить на более дорогой тарифный план у хостера, 2) сокращать объем данных в базе. Вряд ли это Вам годится. Можно изменять запрос. 1. Смотрите в CMS образцы формирования запросов. Например, прием для $filter['in_stock'] в api/Products.php. 2. Обратить внимание на логику WHERE. Сейчас в результат попадают ВСЕ товары с условием o.value LIKE '%мульти%', в том числе не в наличии. В условиях надежнее скобки ставить... 3. Выбираемое поле p.id носит довольно случайный характер. Задуматься, нужно ли оно. 4. Возможно, эффективнее будет у категорий создать специальное поле с отметкой о сезонности. Либо этот же запрос кешировать... Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 9 октября, 2020 Автор Жалоба Поделиться Опубликовано 9 октября, 2020 Спасибо за советы, буду экспериментировать. В WHERE написано v.stock > 0, т.е. товары которых нет в наличии не попадают в выборку. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 9 октября, 2020 Жалоба Поделиться Опубликовано 9 октября, 2020 2 часа назад, esistema1 сказал: Спасибо за советы, буду экспериментировать. В WHERE написано v.stock > 0, т.е. товары которых нет в наличии не попадают в выборку. OR NULL нужно добавить для товаров с бесконечным складом. Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 9 октября, 2020 Жалоба Поделиться Опубликовано 9 октября, 2020 2 часа назад, esistema1 сказал: Спасибо за советы, буду экспериментировать. В WHERE написано v.stock > 0, т.е. товары которых нет в наличии не попадают в выборку. Еще как попадают! Замечание от Noxter-а про возможность stock=NULL - это далеко не исчерпывающая часть логических ошибок запроса, связанных с условием наличия. Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.