【发布时间】:2017-02-15 03:19:24
【问题描述】:
这里是三个表,order,order_record,pay,有近2300000条记录。
给定1个order_id时pay table会有多于1条记录,所以我需要使用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 秒。
有没有更快的实现方式?
【问题讨论】:
-
您是否在列上设置了索引?
-
请添加您的表结构(带索引)以及查询的解释说明。
-
第二个查询无效,因为您选择的是非聚合列。而
DISTINCT经常使用GROUP BY作为实现,所以两者的行为应该相似。以上关于索引的评论是相关的。 -
@FreedomPride 是的
-
@JorgeCampos 抱歉,我无法给出结构。我的查询的基本内容是查询存储在 order/order_record/pay 表中的订单数据的限制数量,有序,没有重复