MySQL почему требуется слишком много времени, чтобы результаты сортировки включали SELECT IF() как Алису

#mysql #datatables

#mysql #таблицы данных

Вопрос:

У меня есть две таблицы products и products_actions

в продуктах я храню обычные данные, такие как id, name, manufacure, price, date_added

в product_actions я храню такие данные, как: id, product_id, store_id, operator, status_id

тогда проблема в том, что когда я отображаю данные в таблицах данных и пытаюсь отсортировать по store_id, это занимает много времени, например, 3-4 секунды (если я сортирую по имени или идентификатору, это занимает менее половины секунды), даже если я индексирую product_id в product_actions, по-прежнему возникают проблемы только с 2 тыс. записей в products_actions и 14 тыс. записей в products

Как исправить проблему с сортировкой, когда я использую IF как Alice, похоже, там нет индексации

     SELECT p.id, p.name, p.mpn, p.price, p.comment, p.status, p.date_added, m.name AS manufacture,
(SELECT IF(pa.store_id = 9, pa.status, 'null') FROM products_actions pa WHERE p.id = pa.product_id AND pa.store_id = 9) AS store_1,
(SELECT IF(pa.store_id = 4, pa.status, 'null') FROM products_actions pa WHERE p.id = pa.product_id AND pa.store_id = 4) AS store_2,
(SELECT IF(pa.store_id = 5, pa.status, 'null') FROM products_actions pa WHERE p.id = pa.product_id AND pa.store_id = 5) AS store_3
FROM products p
LEFT JOIN manufacture m ON p.manufacture = m.id
  

Ответ №1:

поскольку я выбираю store_id и status из products_actions

 (SELECT IF(pa.store_id = 9, pa.status, 'null') FROM products_actions pa WHERE p.id = pa.product_id AND pa.store_id = 9) AS store_1
  

я тоже должен их проиндексировать, а не только product_id, как я сделал