Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加快查询MySQL的速度_Mysql - Fatal编程技术网

加快查询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(*)相同的结果
但运行得更快。显示表定义,然后运行
解释
查看是否使用了索引。