首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相同的数据库和查询生产服务器比本地环境慢100倍。

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

Stack Overflow用户
提问于 2014-08-22 22:52:55
回答 2查看 762关注 0票数 0

我很难理解为什么生产机器执行来自PHPMYADMIN的查询比本地机器慢。

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

代码语言:javascript
复制
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资源的生产服务器上的大量流量。

本地服务器( Win 7 Win AMPPS,mysql 14.14远端5.6.14 for win32 (x86),PhpMyAdmin v3.5.8.2)

  • 查询花费了0.0780秒
  • Exlain ( http://pastebin.com/ucWxd6Pw )
  • MySQL配置( http://pastebin.com/hmz5f19z )

生产服务器(Ubuntu12.04LTS,mysql 14.14远端5.5.35,用于debian gnu,PhpMyAdmin v3.4.10.1)

  • 查询花费了66.0930秒
  • Exlain ( http://pastebin.com/nJEW4TiF )
  • MySQL配置( http://pastebin.com/Dn0BzZ1x )

为什么表现有这么大的差别?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-22 23:03:11

您在生产中运行的是MySQL版本5.5,本地版本为5.6。它们明显地改进了5.6中的查询优化。注意EXPLAIN输出中的不同之处。

试试这个:

代码语言:javascript
复制
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上有索引,那么它就可以使用它来获取计数。

票数 3
EN

Stack Overflow用户

发布于 2014-08-22 23:15:24

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25456654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档