Оптимизация MySql запроса: count, orderBy, groupBy

114
11 марта 2022, 03:30

столкнулась с проблемой оптимизации следующего запроса.

SELECT cs.id, cs.parent_id, cs.name, cs.name_rus
     , cs.description, cs.type_category, cs.url, cs.title
     , cs.meta_title, cs.meta_keywords, cs.meta_description
     , cs.image, cs.visible, cs.position, cs.percent1, cs.percent2
     , cs.is_can_liked, cs.product_percent, cs.country_id
     , COUNT( v.id ) AS prod_count
     , co.name
FROM categories cs
LEFT JOIN prod_categories pc ON pc.category_id = cs.id
LEFT JOIN prod ps ON ps.id = pc.product_id
                     AND ps.visible
LEFT JOIN countries co ON cs.country_id = co.id
                          AND country_id <> 0
LEFT JOIN variants v ON ps.id = v.product_id 
                    AND (v.stock > 0 
                         OR (v.stock IS NULL AND v.st_custom = 1))
GROUP BY cs.id
ORDER BY cs.position

Прикладываю скрин EXPLAIN'а.

Возможно ли как-то ещё оптимизировать запрос? Перепробовала различные индексы и зашла в тупик :( На данном этапе запрос выдает у меня 5935 строк за 1,5-1,6 сек.

READ ALSO
Mysql таблица на 40-50 млн записей со множеством SELECT и INSERT

Mysql таблица на 40-50 млн записей со множеством SELECT и INSERT

ЗдраствуйтеНедавно на новом проекте столкнулся в первый раз с проблемой относительно больших данных в Mysql

110
Вывести пользователей Mysql

Вывести пользователей Mysql

Как вывести всех пользователей, которых я не лайнкул в таблице likes и соответствую условию

93
Как преобразовать в Map

Как преобразовать в Map

Есть некий класс UserКак я могу его преобразовать в справочник, по принципу[номер телефона -> пользователь]

150
Android. Java. Условие в Random.nextInt();

Android. Java. Условие в Random.nextInt();

Подскажите, как можно заменить мою проверку, на такую, чтобы она выполнялась сразу при рандоме в первой строке, если это возможно:

144