我很难理解为什么生产机器从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)
为什么性能会有如此巨大的差异?
由于
答案 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)
您要返回多少行?它可能会计算将结果从主机传输到工作站所需的时间。