wjm0506
wjm0506
采纳率0%
2019-01-23 16:15

mysql 多表join count数据很慢

5

问题如题

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左右, 求给点优化建议

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • zhongsan123 才沐木 2年前

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

    
    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
    
    点赞 评论 复制链接分享
  • qq_33321669 qq_33321669 2年前

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

    点赞 评论 复制链接分享
  • qq_27718453 庄粟 2年前

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

    点赞 评论 复制链接分享
  • qq_21741673 洗洗脚泡泡澡 2年前

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

    点赞 评论 复制链接分享
  • liangayang 敲个锤子 2年前

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

    点赞 评论 复制链接分享

相关推荐