相同的数据库和查询 - 生产服务器比本地环境慢100倍

时间:2014-08-22 22:52:55

标签: mysql sql phpmyadmin

我很难理解为什么生产机器从PHPMYADMIN执行查询的速度与本地机器相比这么慢。

我运行的查询to get the number of job each skill has

SELECT jrs.skill_id, COUNT(jrs.job_id)
FROM
(
SELECT id
FROM job
WHERE active_to > NOW()
) as active_job
JOIN job_req_skill jrs 
WHERE jrt.job_id = active_job.id
GROUP BY skill_id

生产和本地计算机上的数据库完全相同,并且生产服务器上的流量不会消耗掉mysql资源。

本地服务器(带有AMPPS的Win 7,用于win32(x86)的mysql ver 14.14 distrib 5.6.14,PhpMyAdmin v3.5.8.2)

Production Server(Ubuntu 12.04 LTS,mysql ver 14.14 Distrib 5.5.35,debian-linux-gnu,PhpMyAdmin v3.4.10.1)

为什么性能会有如此巨大的差异?

由于

2 个答案:

答案 0 :(得分:3)

您正在生产中运行MySQL 5.5,本地运行5.6。他们显然改进了5.6中的查询优化。请注意EXPLAIN输出中的不同。

试试这个:

SELECT jrs.skill_id, COUNT(*)
FROM job 
JOIN job_request_skill AS jrs ON jrs.job_id = job.id
WHERE job.active_to > NOW()
GROUP BY jrs.skill_id

直接引用该表,而不是在子查询中,可以避免构造临时表。除非您特别需要避免在列中计算空值,否则通常应使用COUNT(*)而不是COUNT(column);如果skill_id上有索引,则可以使用此索引来获取计数。

答案 1 :(得分:1)

您要返回多少行?它可能会计算将结果从主机传输到工作站所需的时间。