如何提高复杂的 MySQL 选择查询的性能?

约格什·乔汉

我正在开发项目管理工具,在通过管理端生成报告时,从数据库中加载数据的时间超过 5 分钟。我知道有几点可以帮助我提高性能,但现在我需要在 SELECT 查询中获得帮助

SELECT timesheet_client.organisation as client_name, timesheet_project.title as project_name,
  timesheet_task.name as task, CONCAT(timesheet_user.first_name, ' ', timesheet_user.last_name) as resource_name,
  timesheet_user.bill_factor, timesheet_client.client_type, sum(spent) as spent, sum(delivered_hours) as delivered_hours, 
  sum(billable_hours) as billable_hours, comments, color, lock_color, updated_by, updated_by_date, timesheet_user_psdb.grp_id, 
  timesheet_user_psdb.client_id, timesheet_user_psdb.proj_id, timesheet_user_psdb.task_id, timesheet_user_psdb.uid, 
  timesheet_user_grp.grp_name
FROM timesheet_user_psdb,timesheet_user, timesheet_client, 
  timesheet_project,timesheet_task,timesheet_user_grp
WHERE timesheet_user.username=timesheet_user_psdb.uid and
  timesheet_client.client_id=timesheet_user_psdb.client_id and timesheet_project.proj_id=timesheet_user_psdb.proj_id and
  timesheet_task.task_id = timesheet_user_psdb.task_id and timesheet_user_grp.grp_id=timesheet_user_psdb.grp_id and month =3
  AND year = 2017 and month!='' and timesheet_user_psdb.client_id=326  
GROUP BY timesheet_user_psdb.task_id,timesheet_user_psdb.uid
ORDER BY timesheet_client.client_type desc,timesheet_client.organisation,timesheet_user_psdb.proj_id,
  timesheet_user_psdb.task_id,timesheet_user.uid,timesheet_user_psdb.task_id;

我已经在所有主键上使用了索引。

解释输出: EXPLAIN 上述语句的结果

对此的帮助将是非常可观的。

约翰迈耶

试试这个:

SELECT 
    TC.ORGANISATION AS CLIENT_NAME, 
    TP.TITLE AS PROJECT_NAME,
    TT.NAME AS TASK, 
    CONCAT(TU.FIRST_NAME, ' ', TU.LAST_NAME) AS RESOURCE_NAME,
    TU.BILL_FACTOR, 
    TC.CLIENT_TYPE, SUM(SPENT) AS SPENT, -- You should specify which table this comes from
    SUM(DELIVERED_HOURS) AS DELIVERED_HOURS, -- You should specify which table this comes from
    SUM(BILLABLE_HOURS) AS BILLABLE_HOURS, -- You should specify which table this comes from
    COMMENTS, -- You should specify which table this comes from
    COLOR, -- You should specify which table this comes from
    LOCK_COLOR, -- You should specify which table this comes from
    UPDATED_BY, -- You should specify which table this comes from
    UPDATED_BY_DATE, -- You should specify which table this comes from
    TUP.GRP_ID, 
    TUP.CLIENT_ID, 
    TUP.PROJ_ID, 
    TUP.TASK_ID, 
    TUP.UID, 
    TUG.GRP_NAME
FROM    
    TIMESHEET_USER AS TU
        LEFT OUTER JOIN 
    TIMESHEET_USER_PSDB AS TUP
        ON TU.USERNAME = TUP.UID
        LEFT OUTER JOIN
    TIMESHEET_USER_GRP AS TUG
        ON TUP.GRP_ID = TUG.GRP_ID
        LEFT OUTER JOIN     
    TIMESHEET_CLIENT AS TC
        ON TUP.CLIENT_ID = TC.CLIENT_ID
        LEFT OUTER JOIN
    TIMESHEET_PROJECT AS TP
        ON TUP.PROJ_ID = TP.PROJ_ID
        LEFT OUTER JOIN
    TIMESHEET_TASK TT
        ON TUP.TASK_ID = TT.TASK_ID 
WHERE 
    MONTH = 3 AND -- You should specify which table this comes from
    YEAR = 2017 AND -- You should specify which table this comes from
    MONTH != '' AND -- You should specify which table this comes from
    TUP.CLIENT_ID = 326  
GROUP BY 
    TUP.TASK_ID,
    TUP.UID
ORDER BY 
    TC.CLIENT_TYPE DESC,
    TC.ORGANISATION,
    TUP.PROJ_ID,
    TUP.TASK_ID,
    TU.UID,
    TUP.TASK_ID;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何提高mysql查询的性能?

来自分类Dev

如何提高mysql查询的性能?

来自分类Dev

MySQL-为复杂的计算提高UPDATE查询性能

来自分类Dev

如何使用NULL提高MySQL查询的性能?

来自分类Dev

提高MySQL中的查询性能

来自分类Dev

提高性能的MySQL查询

来自分类Dev

如何强制联接顺序以提高MYSQL中的查询性能?

来自分类Dev

如何在 Python 上提高 MySQL 查询的性能

来自分类Dev

mysql选择查询的where子句顺序的更改是否会提高性能?

来自分类Dev

MySQL嵌套选择查询性能

来自分类Dev

使用OR时,MYSQL可提高查询性能

来自分类Dev

MySQL查询性能提高了吗?

来自分类Dev

MySQL - 需要帮助提高查询性能

来自分类Dev

提高 SQL 查询选择性能

来自分类Dev

如何提高具有非依赖子查询的MySQL查询的性能?

来自分类Dev

如何通过索引正确提高MySQL性能

来自分类Dev

选择mysql查询的性能确实很差

来自分类Dev

简单选择查询的MySQL性能问题

来自分类Dev

MySQL:如何选择和处理“ n到n”相关数据以提高性能

来自分类Dev

如何提高PostgreSQL查询性能

来自分类Dev

如何提高查询执行性能

来自分类Dev

如何提高pymongo查询的性能

来自分类Dev

如何提高此查询的性能

来自分类Dev

如何提高 mongoDb 查询性能?

来自分类Dev

如何提高sql查询的性能

来自分类Dev

MySQL:提高子选择查询的效率

来自分类Dev

如何提高此MySQL查询的速度?

来自分类Dev

如何提高此MySQL查询的速度?

来自分类Dev

提高 Mysql 查询性能(索引类型使用说明)