Альтернативы присоединениям в mysql - PullRequest
0 голосов
/ 04 мая 2018

У меня следующий запрос, который извлекает состояние для разных хранилищ в таблице и отображает его в виде разных столбцов.

SELECT a.Store_ID,b.total as order_completed,c.total as order_cancelled,d.total as order_processed,e.total as order_failed FROM ORDER_HISTORY a
    -> LEFT OUTER JOIN(select Store_ID,count(*) as total from ORDER_HISTORY where Status = 57 group by Store_ID)b on a.Store_ID = b.Store_ID
    -> LEFT OUTER JOIN(select Store_ID,count(*) as total from ORDER_HISTORY where Status = 53 group by Store_ID)c on a.Store_ID = c.Store_ID
    -> LEFT OUTER JOIN(select Store_ID,count(*) as total from ORDER_HISTORY where Status = 52 group by Store_ID)d on a.Store_ID = d.Store_ID
    -> LEFT OUTER JOIN(select Store_ID,count(*) as total from ORDER_HISTORY where Status = 62 group by Store_ID)e on a.Store_ID = e.Store_ID
    -> group by a.Store_ID;

Может кто-нибудь предложить альтернативу использованию объединений, поскольку это влияет на производительность операций с БД.

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Попробуйте использовать триггер. То же, что хранимая процедура, которая выполняется, когда в базе данных происходит событие. может быть, это поможет вам.

0 голосов
/ 04 мая 2018

Создайте индекс на ORDER_HISTORY сверх (Store_ID, Status), тогда это должно быть много быстро.

SELECT
    Store_ID,
    status,
    COUNT(*) as total
FROM
    ORDER_HISTORY
GROUP BY
    Store_ID,
    status;

Затем используйте свое приложение для отображения данных нескольких результирующих строк в столбцах. Не должно быть сложно реализовать.


Другой подход будет (тот же индекс, что и выше):

SELECT
    Store_ID,
    SUM(CASE WHEN Status = 57 THEN 1 ELSE 0 END) AS order_completed,
    SUM(CASE WHEN Status = 53 THEN 1 ELSE 0 END) AS order_cancelled,
    SUM(CASE WHEN Status = 52 THEN 1 ELSE 0 END) AS order_processed,
    SUM(CASE WHEN Status = 62 THEN 1 ELSE 0 END) AS order_processed
FROM
    ORDER_HISTORY
GROUP BY
    Store_ID;

Заменить значения NULL на соответствующие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...