我有这个简单的查询
SELECT *,count(*) as total FROM `Artikels` group by `Manuf_nr` having total >1
但大约需要 3 秒才能得到结果。无论如何我可以加快速度吗?提前感谢您的回复。
我有这个简单的查询
SELECT *,count(*) as total FROM `Artikels` group by `Manuf_nr` having total >1
但大约需要 3 秒才能得到结果。无论如何我可以加快速度吗?提前感谢您的回复。
目前你告诉 mysql 隐含地对额外的列进行分组,这可能会产生影响......我要么做
SELECT `Manuf_nr`,count(*) as total FROM `Artikels` group by `Manuf_nr` having count(*) >1
或扩展您的*
并将这些包含在组中。
您应该只进入查询绝对需要的详细信息级别 - 您需要每个的第一组详细信息Manuf_nr
还是只需要Manuf_nr
具有超过 1 条记录的 s?
确保Manuf_nr
被索引将产生最大的不同。
如果可能,您还想只选择您感兴趣的字段。
您的脚本会给出奇怪的结果,因为来自 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 有不止一行。