mysql 多表join count数据很慢 5C

问题如题

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

songwei1006
舍文 wf_workitem 的operate_user 和 current_state 两个列重复的值多吗?activityinst_id 这个外键上有没有索引?
8 个月之前 回复

5个回答

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

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

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

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

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


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
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
mysql多表count累计
SELECT ( SELECT count(*) AS m1 FROM table1 ) + ( SELECT count(*) AS m2 FROM table2 ); select(*): select括号里面的只能为一行一列,否则会报错; select * from ():可以返回多行多列。 另外mysq...
mysql left join 关联查询很慢
最近使用mysql,两表关联查询遇到悲催的事,查了些资料了也没能解决,粉丝用户表4W多,粉丝标签表2千多数据,一个查询下来19秒,受不鸟了。。。 求且高人指路。rn wx_fans表中,openid是主键,subscribetime是全文关键字索引,其他为普通信息字段;rn wx_fans_tag_r表中,openid是全文关键字索引,该表只有俩字段,openId和tagId(也就是一对多,一个粉丝有多个标签的意思)rn 下面是查询语句:rnrn SELECT t.openid, subscribetime,createtime, subscribeStatus, nickname, nicknameStr, gender, country, province, city, headimgurl, STATUS, remark,groupId, r.tagId FROM wx_fans t rn LEFT OUTER JOIN wx_fans_tag_r r ON t.openid=r.openid WHERE 1=1rn ORDER BY subscribetime DESCrn LIMIT 0,20rnrn 以下是EXPLAIN sql的结果:rn[img=https://img-bbs.csdn.net/upload/201712/04/1512396067_716199.png][/img]rnrn 以下是 SHOW INDEX FROM wx_fans的结果:rn[img=https://img-bbs.csdn.net/upload/201712/04/1512395850_536734.png][/img]rnrn 以下是 SHOW INDEX FROM wx_fans_tag_r的结果:rn[img=https://img-bbs.csdn.net/upload/201712/04/1512395873_939505.png][/img]rnrnrn 求指点!!!!rnrn
百万级数据count 很慢 .
select count(1) as Counts from kjbg_ysdata t where ( contains(TITLE , 'the')>0 ) AND ( contains(SEARCHORG,'NASA (Unspecified Center)')>0 ) rnrntitle,searchorg 都是建的全文索引 . rn下面是时间和计划 。rn[img=https://img-bbs.csdn.net/upload/201504/02/1427946133_294416.png][/img].rn[img=https://img-bbs.csdn.net/upload/201504/02/1427946164_229353.png][/img]
LEFT JOIN 多表选择数据(任意join)
如上图所示,a表为上线表,b,c分别为数据总集表,从上线表中查找有效数据(即在a或b表中数据正常)从a中获取存在表b或表c中有效数据获取第一页有效数据,sql语句:select `a`.router,`a`.routerValue,`a`.sort,`b`.subhead `subName`, CONCAT_WS('',`b`.name,`c`.name) as name, CONCAT_WS(''
[MySql]多表联查:join、left join、right join的用法
多表联查:join、left join、right join的用法
mysql insert 多表数据
inset into music(m_file,music_title,nameid,type) values('11','12','nameid','type')rnnameid,和type在别的表中获取 不知道怎么写语句?rn我网上找的都是把另一个表直接复制过来rn有没好的方法吗?
mysql left join 查询很慢,数据量不大
简单粘贴一下我的sql: 同事告诉我,界面打开很慢,总共订单数据只有100多条,理论上不应该这么慢的,然后找到对应的sql语句,进行简单的分析,  背景交代一下:mysql5.7,工具Navicat12 ,本人对mysql也就是属于可以用的层级 分析的步骤: 1.先对sql做精简,测试几次过后发现 left join mdm_consignee 对效率影响特别大,注释之前需要查询 0....
mysql多表left join 1对多的解决办法
一个表left join多个表并导出csv本身是很简单的事。但是主表的一列有多个值,一开始用逗号分隔保存数据,这样做的好处是方便应用程序处理,但是对于mysql来说这是anti-pattern的做法。果然,在写left join的时候无法实现一个field保存多ID,并跟关联表匹配输出csv文件。(尝试了find_in_set 只能输入一行) 还是应该遵守RMDB的范式来设计DB,将多值的列...
mysql中多表full outer join如何做?
如题,我用的是mysql5.5,貌似对full join还是不支持,又上网查了下,貌似只能用left join和right join,然后再union,不过网上的方法只能对两个或三个进行全连接,我这里有7个表要全连接,不知道怎么写,请教各位了。
MYSQL 怎么 LEFT JOIN 多表联查
三表联查: SELECT a.count,b.bname,DATE_FORMAT(FROM_UNIXTIME(a.time),'%Y-%m-%d %H:%i:%s') as time,c.age from a LEFT JOIN b ON a.ruleid = b.id LEFT JOIN c ON a.topruleid = c.id WHERE a.time BETWEEN 15429...
PHP完成MySQL多表连接查询-- JOIN
本文源于菜鸟教程 可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。 JOIN 按照功能大致分为如下三类: 1、INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。 2、LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。 3、RIGHT JOIN(右连接): 与 LEFT JOIN 相反,...
两亿的数据量,count 很慢
[img=https://img-bbs.csdn.net/upload/201503/19/1426738059_483283.png][/img]rnrn[code=sql]rnselect COUNT(1) from dbo.BI_Storagern[/code]rnrn统计全表数据一共:262674567条数据,共了9分钟rnrn为什么这么慢,该怎么优化
oracle select count(*) 很慢
oracle select count(*) 很慢 表中大楷有1千万条数据 我想得到 记录数 有没有好的方法优化 请赐教
select count(*)很慢
select count(*) from A , B where A.id=b.aid rn就这一条简单的count语句,却很慢,得接近2秒!但如果select count(*) from A(或B)时间马上就到0.0几秒,差的太多了吧!rnrnA表和B表各有20多万条记录吧。而且,id列都是主健,B表的aid也已经建了nomal索引了。我看过执行计划,一个表是index fast full scan(cost 250 cardinality 246962 ) ,一个表是index unique scan (cost 1 cardinality 1) ,都不是全表扫描了呀,rnrn请问还有优化的可能没,怎么优化?
Mysql 多表连接查询 inner join 和 outer join 的使用
JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接。这里描述先甩出一张用烂了的图,然后插入测试数据。 首先先列举本篇用到的分类(内连接,外连接,交叉连接)和连接方法(如下): A)内连接:join,inner join B)外连接:left join,left outer join,right join,right outer join,u...
多表联合查询count的问题
我想求按t_users表中的不同user_id 查出t_activity表中不同的act_type的count(act_type),act_type 为 t_activitytype中top 5 的type_id,rnrnt_users.user_id=t_opporunity.opporunity_create,rnt_opporunity.opporunity_id=t_activity.opporuniyt_id,rnt_activity.act_type=t_activityType.type_idrnrn得到的结果是这样:rn用户名 type_name1 type_name2 type_name3 type_name4rn 张三 2 5 0 9rn 李四 0 4 3 5rnrnrn表结构如下:rnCREATE TABLE [dbo].[t_Opporunity] (rn [Opporunity_ID] [int] IDENTITY (1, 1) NOT NULL ,rn [Opporunity_CustID] [int] NULL ,rn [Opporunity_Content] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL ,rn [Opporunity_Create] [int] NULL ,rn [Opporunity_DelFlag] [int] NULL rn) ON [PRIMARY]rnGOrnrnCREATE TABLE [dbo].[t_Users] (rn [User_ID] [int] IDENTITY (1, 1) NOT NULL ,rn [User_Name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,rn [User_CompanyID] [int] NULL ,rn [User_Code] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,rn [User_PassWord] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,rn [User_Sex] [bit] NULL ,rn [User_DelFlag] [int] NULL ,rn [User_Position] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL rn) ON [PRIMARY]rnGOrnrnCREATE TABLE [dbo].[t_ActivityType] (rn [Type_ID] [int] IDENTITY (1, 1) NOT NULL ,rn [Type_Name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL rn) ON [PRIMARY]rnGOrnrnCREATE TABLE [dbo].[t_Activity] (rn [Act_ID] [int] IDENTITY (1, 1) NOT NULL ,rn [Opporunity_ID] [int] NULL ,rn [Act_Date] [datetime] NULL ,rn [Act_Type] [int] NULL ,rn [Act_Phase] [int] NULL ,rn [Act_IntendingDate] [datetime] NULL ,rn [Act_IntendingMoney] [money] NULL ,rn [Act_NextDate] [datetime] NULL ,rn [Act_NextType] [int] NULL ,rn [Act_Bewrite] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL ,rn [Act_NextBewrite] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL ,rn [Act_SumUp] [nvarchar] (4000) COLLATE Chinese_PRC_CI_AS NULL ,rn [Act_DelFlag] [int] NULL ,rn [SuccessRate] [float] NULL rn) ON [PRIMARY]rnGOrnrnrn请大家帮忙,谢谢!!
多表count优化
求以下sql语句的优化方式:rn[code=SQL]rn select f1=(select count(a.id) from a inner join b on a.id=b.id),rn f2=(select count(a.id) from c inner join b on a.id=b.id),rn f3=(select count(a.id) from d inner join b on a.id=b.id),rn f4=(select count(a.id) from e inner join b on a.id=b.idd),rn f5=(select count(a.id) from f inner join b on a.id=b.id),rn f6=(select count(a.id) from g inner join b on a.id=b.id),rn f7=(select count(a.id) from h inner join b on a.id=b.id),rn f8=(select count(a.id) from i inner join b on a.id=b.id),rn f9=(select count(a.id) from j inner join b on a.id=b.id),rn f10=(select count(a.id) from k inner join b on a.id=b.id),rn f11=(select count(a.id) from l inner join b on a.id=b.id),rn f12=(select count(a.id) from m inner join b on a.id=b.id)rn[/code]rnrnrn
Python进行数据的多表Join关联操作
在[Python进行数据的Join关联操作及从分表取数据一例]--->http://blog.csdn.net/babyfish13/article/details/53411743 一文中,数据的关联操作仅支持从表是key/vaule两列的形式;本文中要实现的关联对主从表的列数都没有限制。 对于精通Java、Python及C等开发语言的用户,数据的关联取数采用本文介绍的for循环if判断的方式
多表JOIN优化问题
SELECT u.* FROM user u rn LEFT JOIN user_data ud ON (u.user_id = ud.user_id) rn LEFT JOIN account a1 ON (u.user_id = a1.user_id AND a1.acc_sx = 1) rn LEFT JOIN account a2 ON (u.user_id = a2.user_id AND a2.acc_sx = 2) rnWHERE u.user_id=9;rnrn请问这条SQL,如何优化?谢谢。
多表inner join查询。
虽然看了好多,但调试还是出错。没办法,至少再次提问!rn我是这样写的:rnset rs=conn.execute("select a.*,b.depaname,c.cityname,c.areacode from [ctt_users] a inner join [ctt_department] b on a.userdepa=b.idexi inner join [ctt_city] c on a.usercity=c.id where a.username='"&username&"'")rnrn调试后报告是这样的:rnrnMicrosoft JET Database Engine 错误 '80040e14' rnrn语法错误 (操作符丢失) 在查询表达式 'a.userdepa=b.id inner join [ctt_city] c on a.usercity=c.id' 中。 rnrnUserFunc.asp,行 228 rn请问哪里出了问题?
oracle多表join策略
多表之间的连接有三种方式: Nested Loops , Hash Join 和 Sort Merge Join. 下面来介绍三种不同连接的不同:   一. NESTED LOOP: 对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择 。在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表中检索找到与它匹配的行,因此整个查 ...
out join 多表如何写?
out join 多表如何写?rn一:from 表1 LEFT OUTER JOIN 表2,表3rn二:from 表1 LEFT OUTER JOIN 表2,LEFT OUTER JOIN 表3rn三:from 表1 LEFT OUTER JOIN 表2,表2 LEFT OUTER JOIN 表3rnrn可我试了还不行!!!!!!!rnrn
left join多表
select * fromrntable1 left join table2 on 条件1 rnleft join table3 on 条件2 rnleft join table4 on 条件3 rnwhere 条件4rnrn理论上是这样的,但得出来的结果有冗余,rnrn我是想 table1 是最大集合rnrntable2 table3 table4 之间没有关系rnrn但它们都和table1 的ID 有关系 要怎么写呢rnrn嗯 。。。。table2 table3 table4 都是用with as 写出来的。。。
多表级联查询(left join)
关键字: on:数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 实例如下:   SELECT a.id AS ID,a.customer_key AS '推广员id',a.amount AS '金额', d.cooperation_code AS '合作点', e.total_amount AS '总收入',IF(e.amount='0'...
多表链接 Left join
http://www.cnblogs.com/windamy/articles/585555.html 多表链接 Left join 一个我写的实例:其中多表连接,一共连接了3个表。使用聚集函数SUM,用到了GROUP BY SELECT a.[UserID],b.[Name],sum (c.[Money]+c.[Bank])as TotalMoney FROM T
多表 INNER JOIN 用法
备忘:SQL多表内连接语法   select * from B_DiscountExecH EH inner join B_DiscountExecD ED on EH.DiscountNo=ED.DiscountNo inner join B_DiscountReg R on R.RegNo=ED.RegNo inner join B_DiscountSett S on S....
多表join查询
最近做项目,需要查询连接多个表后与一个表左连接查询,在网上查了很多的资料,没有找到解决的办法,郁闷了我好几天,今天终于试出来了。高兴了一把。 SQL语句操作方式一: select distinct a.id, c.first_name as owner_name,f.stuname,f.stusexname,f.cardno,f.orgincardno,f.classname,f.state,...
SQL join 多表
比如有这样一个记录学生成绩的表rnrn学生表rnID 姓名 科目1 成绩1 科目2 成绩2……rn1 111 1 89 3 99rnrn这里科目里的1、2、3分别表示一些实际的科目,但在另外一个表里rnrn科目表rn科目ID 科目名字rn1 语文rn2 数学rn3 物理rnrnrn现在想要查询结果为rn姓名 科目1 成绩1 科目2 成绩rn111 语文 89 数学 99……rnrnrnselect a.姓名,b.科目名字,a.成绩1,b.科目名字a.成绩2rnfrom 学生表 a join 科目表 brnon a.科目1=b.科目ID and a.科目2=b.科目IDrnrn这样不对呀
SQLServerUpdate多表Join
这种多表JOIN后UPDATE经常用到,正常情况下,都是UPDATE一张表,条件也是一张表,但是有时候条件有其他表的,而且更新时,要更新多张的,都有可能。这个虽然简单,但是需要的时候还是必须要用的。
citus 之六 多表join
os: ubuntu 16.04 postgresql: 9.6.8 citus: postgresql-9.6-citus 8.0.0 ip规划如下: 192.168.0.92 pgsql1 --coordinator 节点 192.168.0.90 pgsql2 --worker 节点 192.168.0.88 pgsql3 --worker 节点 distributed table:分片表,...
SQL 多表 Full JOIN???
表1:rnSOID Quantityrn061601 500rn061602 200rnrn表2:rnShipmentID SOID Quantityrn1 061601 300rn2 061601 200rnrn查询得到的表:rnSOID Quantity ShipMentID ShipmentQtyrn061601 500 1 300rn061601 500 2 200rn061602 200 null nullrnrn大家帮下忙哦。我记得这种好像可以用full joinrn但是这个知识点还没有完全体会,希望大家给点提示哦。SQL2005
多表的join 问题
比如现在有这样一张表:rn学生id 课程id 成绩rn1 2 50rn1 3 60rn1 4 70rn1 5 80rnrn我希望通过一个join语句构建一个这样的表:rn学生id 课程id 成绩 课程id 成绩 课程id 成绩 课程id 成绩 rn 1 2 50 3 60 4 70 5 80rnrn具体应该怎么操作呢?rnrn
inner join 多表去重
select 表1.列1,min(表1.列2),min(表2.列4),min(表2.列5),min(表3.列3),min(表3.列4)  from 表1 inner join 表2 on 表1.键=表2.键 inner join 表3 on 表1.键=表3.键 group by 表1.列1...
MR 练习 多表join
多表联查       需求:从多文件输出factoryname    address 数据: 文本一:       factoryname    id        a    1        b    2        c    3        d    4        e    5   文本二:                  id    address        1    A  ...
ORACLE中高级查询
ORACLE中高级查询 前面介绍的查询还局限在数据库的一张表内。但在实际应用中,我们经常需要在多张表中查询数据或者需要对表中的数据进行分类、汇总等。这就需要较为复杂的高级查询。 首先我们需要回顾一下表与表之间的关系: 多个表之间关系(3种):一对多|(多对一) 多对多 一对一 关系的完整性约束:实体完整性、参照完整性、用户定义的完整性。 必须满足实体完整性和参照完整性. 实体完整性:...
SQLSERVER 多表联合查询(join)
前言: 项目中要写个存储过程,从4个表中各获取一个字段值,然后返回。 我这SQLSERVER的三脚猫功夫,上来乱整一顿,别说乱拳打死老师傅,差点把自己弄死! 用法: 使用 INNER JOIN(内连接),我们还可以使用其他几种连接。 下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。 JOIN: 如果表中有至少一个匹配,则返回行 LEFT JOIN: 即使右表中没有匹配,也...
Access多表Join方法
Access 支持三表或三表以上的 join 操作,但是要加括号,一层一层 JOIN 下去。例如:Select * FROM (aa LEFT JOIN bb ON aa.a = bb.a ) LEFT JOIN cc ON cc.a = bb.a;这里需要注意一个问题,在使用join语句查询时,也可以加多个条件,不过要用括号括起来,如:Select * FROM (cc LEFT JOIN aa
多表join连接查询
1.A表:tb_a(a_id,a_name,b_id) 2.B表:tb_b(b_id,b_name,a_id) 3.C表:tb_c(c_id,c_name,b_id) IndexController.class.php控制器 public function Info(){ $Model=M("A");//实例化表名 $Info=$Model->join("t
多表联合查询:join的用法
inner join(等值连接) 只返回两个表中联结字段相等的行; left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录; right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录;
请教一个多表count()的问题。
各位下午好,小弟最近在做自己的毕业论文,遇到了一个棘手的问题。就是通过多表count()来统计某个版块中帖子总数和回帖总数以及版主。rn有四个表:user表,board表,post表,reply表rnrnselect count(post.post_id) from post where post.board_id=1rn得到如下结果:rncount(post.post_id)rn3rnrnselect count(reply.reply_id) from reply where reply.board_id=1rn得到如下结果:rncount(reply.reply_id)rn6rnrn但是:rnSELECT board.name, count( post.post_id ) , count( reply.reply_id ) , user.usernamernFROM boardrnINNER JOIN post ON board.board_id = post.board_idrnINNER JOIN reply ON board.board_id = reply.board_idrnLEFT JOIN user ON board.admin_id = user.user_idrnWHERE board.board_id =1rn确得到如下结果:rnname count( post.post_id ) count( reply.reply_id ) usernamernPHP技术专区 18 18 zxywdrnrn为什么count(post.post_id)和count(reply.reply_id)都是18呢?rn怎么解决这个问题?谢谢各位。
相关热词 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法 c# gmail 发邮件 c# 多层文件