首页 / MYSQL / 在MySQL中减慢子查询
在MySQL中减慢子查询
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在MySQL中减慢子查询,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2580字,纯文字阅读大概需要4分钟。
内容图文
我试图使用CodeIgniter和Datatables.net生成报告.
现在我正在尝试关闭工作量(它是一个人力资源系统).我曾经查询所有的工作,在PHP中做一个foreach,然后进行计算.
因为我想使用Datatables的所有功能(具体排序)我试图在mySQL中完成所有的计算.
问题是:第二个子查询非常非常慢.
SELECT
jobs.jobs_id, clients.nome_fantasia, concat_ws(' ', user_profiles.first_name, user_profiles.last_name) as fullname,
jobs.titulo_vaga, jobs.qtd_vagas, company.name as nome_company, jobs_status.name as status_name, DATEDIFF(NOW(), jobs.data_abertura) as date_idade,
(select count(job_cv.jobs_id) from job_cv where job_cv.jobs_id = jobs.jobs_id) as qtd_int,
(select count(distinct job_cv.user_id) from job_cv_history join job_cv on job_cv.job_cv_id = job_cv_history.job_cv_id where job_cv_history.status = '11' and job_cv.jobs_id = jobs.jobs_id ) as fechadas
FROM (jobs)
JOIN clients ON lients.clients_id=jobs.clients_idJOIN user_profiles ON jobs.consultor_id=user_profiles.user_id
JOIN jobs_status ON jobs.status=jobs_status.jobs_status_id
JOIN company ON jobs.company_id=company.company_id
LIMIT 50
有人能帮帮我吗?如果需要,我可以提供更多信息.
UPDATE
使用JOIN而不是SELECT的想法与第一个子查询一起使用,但第二个子查询没有,有一种方法可以传递一个’变量’来在子查询中使用吗?像当前的jobs_id一样?
再次更新
这条线本身很好用.但是在子查询中需要花费大约一分钟的时间
SELECT job_cv.jobs_id,count(distinct job_cv.user_id) AS fechadas
FROM job_cv_history
JOIN job_cv
ON job_cv.job_cv_id = job_cv_history.job_cv_id
WHERE job_cv_history.status = '11'
GROUP BY job_cv.jobs_id
解决方法:
这个子查询不是很慢.事实上,您正在为从外部查询返回的每一行执行这些子查询.相反,将它们移动到连接,您应该观察到性能的提高.
SELECT
jobs.jobs_id, clients.nome_fantasia, concat_ws(' ', user_profiles.first_name, user_profiles.last_name) as fullname,
jobs.titulo_vaga, jobs.qtd_vagas, company.name as nome_company, jobs_status.name as status_name, DATEDIFF(NOW(), jobs.data_abertura) as date_idade,
qtd.qtd_int,
fechadas.fechadas
FROM (jobs)
JOIN clients ON lients.clients_id=jobs.clients_idJOIN user_profiles ON jobs.consultor_id=user_profiles.user_id
JOIN jobs_status ON jobs.status=jobs_status.jobs_status_id
JOIN company ON jobs.company_id=company.company_id
JOIN (
SELECT jobs_id, count(jobs_id) AS qtd_int FROM job_cv GROUP BY jobs_id
) AS qtd ON qtd.jobs_id = jobs.jobs_id
JOIN (
SELECT job_cv.user_id, count(distinct job_cv.user_id) AS fechadas
FROM job_cv_history
JOIN job_cv
ON job_cv.job_cv_id = job_cv_history.job_cv_id
WHERE job_cv_history.status = '11'
GROUP BY job_cv.user_id
) AS fechadas ON job_cv.jobs_id = jobs.jobs_id
LIMIT 50
内容总结
以上是互联网集市为您收集整理的在MySQL中减慢子查询全部内容,希望文章能够帮你解决在MySQL中减慢子查询所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。