我有一个表(订单),其中包含每个不同订单的所有订单项。 我想知道是否有任何订单上有重复的项目(模型)。
这是我的工作示例,它返回正确的值,但只查看一个订单,执行需要34秒。我需要每天查看约100个订单
SELECT ordnum, model
FROM orders
GROUP BY ordnum, model
HAVING (COUNT( * ) >1 && ordnum='1459387781')
我还有另一张表(orderinfo),如果需要使用,每条记录都是一个ordnum。
必须有一种更好的方法来查询具有31400个不同的ordnum但有130万条记录的表 任何指导?
答案 0 :(得分:0)
该陈述进行全表扫描
如果你真的希望它只查询一个订单,并且该表在ordnum
上有一个索引(似乎很可能),请在WHERE
子句中指定,在这种情况下,'无需在ordnum
中包含GROUP BY
:
SELECT model
FROM orders
WHERE ordnum = '1459387781'
GROUP BY model
HAVING COUNT(*) > 1
如果您"需要每天查看约100个订单" ,并且您想查看今天的订单,并且您的orderinfo
表格有{{1然后执行此操作:
orderdate
如果 SELECT ordnum, model
FROM orders
WHERE ordnum in ( SELECT o.ordnum
FROM orderinfo o
WHERE o.orderdate = CURDATE() )
GROUP BY ordnum, model
HAVING COUNT(*) > 1
的索引位于orderinfo
且 orderdate
的索引位于orders
,会非常快。