mysql 多表join count数据很慢

问题如题

SELECT
    COUNT(1)
FROM
    wf_workitem a -- 总数量159521
JOIN wf_activityinst b ON b.id = a.activityinst_id -- 总数量209453
JOIN wf_processinst c ON c.id = b.processinst_id  -- 总数量26307
WHERE
    a.operate_user = '7424'
AND a.current_state = 'AGREE'
AND c.comp_id = '4715C67AD2B0457A81D32CC0B1148840'
AND c.proj_id = ''

解析计划
图片说明

sql执行需要10s左右, 求给点优化建议

先按条件查出来数据然后再关联试下,例如:


SELECT COUNT(1)
  FROM (select *
          FROM wf_workitem a
         WHERE a.operate_user = '7424'
           AND a.current_state = 'AGREE') a
  JOIN wf_activityinst b
    ON b.id = a.activityinst_id
  JOIN (select *
          from wf_processinst c
         where c.comp_id = '4715C67AD2B0457A81D32CC0B1148840'
           AND c.proj_id = '') c
    ON c.id = b.processinst_id

看上去索引是ok的,这数据量要10秒,有点夸张.

关联字段加上索引 查询条件看看是不是高选择行 按照最左原则建立索引 还要考虑整个表是查询多还是修改删除多 不能光考虑查询问题

你把join on 的字段加上索引,会快很多、或者新建个视图

最好的方式就是写存储过程,最后单表查询