-1

我有这个简单的查询

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

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

4

3 回答 3

1

目前你告诉 mysql 隐含地对额外的列进行分组,这可能会产生影响......我要么做

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

或扩展您的*并将这些包含在组中。

您应该只进入查询绝对需要的详细信息级别 - 您需要每个的第一组详细信息Manuf_nr还是只需要Manuf_nr具有超过 1 条记录的 s?

于 2013-06-19T10:39:37.963 回答
0

确保Manuf_nr被索引将产生最大的不同。

如果可能,您还想只选择您感兴趣的字段。

于 2013-06-19T10:36:46.850 回答
0

您的脚本会给出奇怪的结果,因为来自 Artikels 的 Manuf_nr 以外的列将来自未定义的行(即,如果 10 行具有相同的 Manuf_nr,那么您可能会是 10,但是这 10 行详细信息中的哪一个被 select *并不一定)。

假设 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 有不止一行。

于 2013-06-19T16:24:23.470 回答