加快查询MySQL

时间:2013-06-19 10:35:01

标签: mysql

我有这个简单的查询

SELECT *,count(*) as total FROM `Artikels` group by `Manuf_nr` having total >1

但获得结果大约需要3秒钟。无论如何我可以加快速度吗?提前感谢您的回复。

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有多行。