我有这个简单的查询
SELECT *,count(*) as total FROM `Artikels` group by `Manuf_nr` having total >1
但获得结果大约需要3秒钟。无论如何我可以加快速度吗?提前感谢您的回复。
答案 0 :(得分:1)
目前你告诉mysql隐含地对可能产生影响的额外列进行分组......我会做
SELECT `Manuf_nr`,count(*) as total FROM `Artikels` group by `Manuf_nr` having count(*) >1
或展开您的*
并将其包含在论坛中。
您应该只查看查询绝对需要的详细程度 - 您是否需要每个Manuf_nr
的第一组详细信息,或者只需要{1}}以上的Manuf_nr
记录?
答案 1 :(得分:0)
确保Manuf_nr
被编入索引将会产生最大的影响。
如果可能,您还希望仅选择您感兴趣的字段。
答案 2 :(得分:0)
你的脚本将给出奇怪的结果,因为来自Artikels的Manuf_nr以外的列将来自未定义的行(即,如果10行具有相同的Manuf_nr,那么你的可能是10,但是这10行细节中的哪一个被带回来了选择*不确定。)
假设Manuf_nr上有一个索引,你的SQL应该被重写为: -
SELECT a.*, b.total
FROM Artikels a
INNER JOIN (
SELECT Manuf_nr, count(*) AS total
FROM `Artikels`
GROUP BY Manuf_nr
) b
ON a.Manuf_nr = b.Manuf_nr
AND b.total > 1
这将返回每个Manuf_nr的所有行,其中Manuf_nr有多行。