加快查询MySQL的速度
我有一个简单的问题加快查询MySQL的速度,mysql,Mysql,我有一个简单的问题 SELECT *,count(*) as total FROM `Artikels` group by `Manuf_nr` having total >1 但要得到结果大约需要3秒钟。还有什么我可以加快速度的吗?提前感谢您的回复。确保Manuf\u nr已编制索引,这将带来最大的不同 如果可能的话,您还希望只选择您感兴趣的字段。此时您正在告诉mysql隐式地对可能产生影响的额外列进行分组。。。我要么 SELECT `Manuf_nr`,count(*) as tot
SELECT *,count(*) as total FROM `Artikels` group by `Manuf_nr` having total >1
但要得到结果大约需要3秒钟。还有什么我可以加快速度的吗?提前感谢您的回复。确保
Manuf\u nr
已编制索引,这将带来最大的不同
如果可能的话,您还希望只选择您感兴趣的字段。此时您正在告诉mysql隐式地对可能产生影响的额外列进行分组。。。我要么
SELECT `Manuf_nr`,count(*) as total FROM `Artikels` group by `Manuf_nr` having count(*) >1
或者展开您的*
,并将其包括在分组中
您应该只转到您的查询绝对需要的详细级别-您是需要每个
Manuf\u nr
的第一组详细信息,还是只需要包含多个记录的Manuf\u nr
s?您的脚本将给出奇怪的结果,因为Artikels的Manuf\u nr以外的列将来自未定义的行(也就是说,如果10行具有相同的制造编号,那么您的可能是10行,但select*返回的这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
这将返回每个生产的所有行,其中该生产有多行。您有多少项?数据库中有索引吗?表中有多少列?您真的需要所有列吗?还要注意,
count(1)
将产生与count(*)相同的结果
但运行得更快。显示表定义,然后运行解释
查看是否使用了索引。