我已经将一个数据库从5.6.35复制到5.7.10,这两个版本都是mysql社区服务器版本,由于某些原因,我的查询运行非常慢。它是一个innodb数据库。
5.6是我的开发服务器。
windows server标准sp2
32位
4gb内存
5.7是我的生产服务器
windows server 2008 r2企业版sp1
64位
24gb内存
这不是一个复杂的查询。
SELECT t.*
,(SELECT `name` FROM users u1 WHERE u1.id = t.addedby) AS addebyname
,(SELECT `name` FROM users u2 WHERE u2.id = t.modifiedby) AS modifiedbyname
,(SELECT `title` FROM tasks_groups tg WHERE tg.id = t.groupid) AS grouptitle
,(
CASE
WHEN t.active=0 THEN CONCAT(t.title,' (Inactive)')
ELSE t.title
END
) AS combo
,(SELECT
IFNULL(SUM(ts.worked),0)
FROM timesheet ts
WHERE ts.taskid=t.id
) AS totaltaskhours
FROM tasks t
5.6需要0.468秒才能返回58条记录
7.5需要89.922秒才能返回58条记录
如果我删除了查询的(selectifnull…)部分,那么它的运行速度非常快,所以不知道为什么这会减慢5.7版的查询速度。我在各个表之间设置了所有索引。时间表只有238837行,所以没有那么大。
我有点不明白为什么。。。
这是解释结果,不太清楚这意味着什么。。
5.6
5.7
1条答案
按热度按时间8gsdolmq1#
不管是谁安装了mysql服务器,都懒得在ini文件中将innodb\u buffer\u pool\u大小设置为一个合适的大小。在一台24gb的服务器上,它的容量非常低,增加了,现在一切都按预期运行。谢谢大家的建议