Вот три таблицы, заказ, order_record, pay, с почти 2300000 записями.mysql «отдельный запрос» из таблицы 3 выполняет медленные операции при больших данных
будет больше чем 1 запись в таблице выплат, давая 1 ORDER_ID, так что мне нужно использовать DISTINCT для удаления Повторного результата
теперь мне нужно, чтобы получить различные данные из этих трех соединения таблиц на order_id, пример запрос sql ниже:
SELECT
DISTINCT (a.order_id)
a.order_id,a.user_id
b.boss_order_id,
c.pay_id,
FROM order a
LEFT JOIN order_record b ON a.order_id = b.order_id AND b.is_delete IN (0,1)
LEFT JOIN pay c ON a.order_id = c.order_id AND c.is_delete =0 WHERE 1=1 AND a.is_delete IN (0,1)
ORDER BY a.id DESC LIMIT 0, 10
Этот запрос займет много времени. потом изменить, чтобы использовать "GROUP BY":
SELECT
a.order_id,a.user_id
b.boss_order_id,
c.pay_id,
FROM order a
LEFT JOIN order_record b ON a.order_id = b.order_id AND b.is_delete IN (0,1)
LEFT JOIN pay c ON a.order_id = c.order_id AND c.is_delete =0 WHERE 1=1 AND a.is_delete IN (0,1)
GROUP BY a.order_id
ORDER BY a.id DESC LIMIT 0, 10
на этот раз запрос занимает 122 секунд.
Есть ли более быстрый способ реализовать?
Вы указали индексирование столбцов? – FreedomPride
Пожалуйста, добавьте структуру ваших таблиц (с индексами), а также поясницу объяснения ваших запросов. –
Второй запрос недействителен, поскольку вы выбираете неагрегатные столбцы. И 'DISTINCT' часто использует' GROUP BY' в качестве реализации, поэтому они должны вести себя аналогичным образом. Вышеупомянутый комментарий об индексировании имеет значение. –