#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, как я сделал