SELECT
f.appName,
f.projectName,
f.appId AS id,
f.projectId,
DATE_FORMAT(d.create_date, "%Y-%m-%d") AS createDate
FROM
device d
LEFT JOIN (
SELECT DISTINCT
projects_has_apps.partner_project_id AS projectId,
app.id AS appId,
app.app_name AS appName,
partner_project.project_name AS projectName
FROM
projects_has_apps,
partner_project,
partner,
partner_has_partner_project,
app
WHERE
partner_project.id = projects_has_apps.partner_project_id
AND projects_has_apps.app_id = app.id
AND partner.id = partner_has_partner_project.partner_id
AND partner_has_partner_project.partner_project_id = partner_project.id
AND partner.id = 1
AND projects_has_apps.app_id = app.id
) f ON d.project_name = f.projectName这句sql的性能好差 请大神帮忙优化一下 刚刚接触这方便不知道怎么优化

解决方案 »

  1.   

    explain 贴出查询计划
      

  2.   

    有多慢,时间是多少?用explain看看
      

  3.   

    做拆分处理,explain可以看一下执行计划了。
      

  4.   

    app所属的project的partner的partner的partner的id=1,取app信息、project信息、project的partner信息。然后device中的project_name与所得的project的partner的project_name Left join。本身意图就太混乱,这种sql,如果可能还是先理清意图,然后重新设计表结构。