问题如题
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 的字段加上索引,会快很多、或者新建个视图
最好的方式就是写存储过程,最后单表查询