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

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

5个回答

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

0

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

0

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

0

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

0

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


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
0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
从多表连接后的select count(*)看待SQL优化
从多表连接后的select count(*)看待SQL优化 一朋友问我,以下这SQL能直接改写成select count(*) from a吗? SELECT COUNT(*) FROM a LEFT JOIN b ON a.a1 = b.b1 LEFT JOIN c ON b.b1 = c.c1 废话不多说,直接上实验。 1. 准备数据 创建测试表a,b,c,并...
使用延迟的join来优化count(*)和limit语句(翻译)
在很多运用中,常有这样的结构,一个主表和一个附加表,附加表用来存一些附加信息,取数据的时候需要和主表连接。如果你在这样的结构上执行count(*),那么即使使用了left join,MySQL仍然会做连接。同样的如果使用了limit,MySQL也会连接一些最终会扔掉的行。当limit的偏移量很大的时候,这样的连接是很浪费时间的。对于这样的情况,你可以帮助MySQL不要对count(*)做连接或者做...
mysql left join 查询很慢,数据量不大
简单粘贴一下我的sql: 同事告诉我,界面打开很慢,总共订单数据只有100多条,理论上不应该这么慢的,然后找到对应的sql语句,进行简单的分析,  背景交代一下:mysql5.7,工具Navicat12 ,本人对mysql也就是属于可以用的层级 分析的步骤: 1.先对sql做精简,测试几次过后发现 left join mdm_consignee 对效率影响特别大,注释之前需要查询 0....
mysql sum join 多表统计求和时不正确的问题
我在做订单统计的时候遇到问题,就是多表求和时发现不正确 我有下面两个表 -- -- 表的结构 `mobile_shops_orders` -- CREATE TABLE IF NOT EXISTS `mobile_shops_orders` ( `oid` varchar(80) NOT NULL, `userid` int(10) NOT NUL
MySQL的count查询超级慢?我是这么解决的
你可能需要给 Primary Key 加上 Uniqle 约束了 问题描述 数据表结构: Field Type Null Key Default Extra id int(10) unsigned NO PRI NULL auto_increment mid varchar(50) NO UNI ...
Mysql多个LEFT JOIN使用ORDER不能使用索引导致查询过慢的解决方案
转自:http://www.tuicool.com/articles/qemmMfY Mysql在多个LEFT JOIN的情况下使用ORDER BY排序,就算是其中一个表的主键也仍然使用file sort排序,数据量多的话就相当的慢。 优化前语句 SELECT * FROM a LEFT JOIN b ON a.id=b.a_id ORDER a.id DESC
MySQL系列-优化之join多表连接
1.先看一个单表案例 有如下下数据表,只有主键id 执行sql【explain select id,n1 from tb where n2='f' and n4>'c' order by n3 desc limit 1;】 通过explain分析: 不光是ALL全表扫描,而且还产生了一次内部排序using filesort,效率及其底下。 那么如何建立索引呢?首先n2这个字...
mysql 两表联合查询数据多了很慢
1、不要直接去关联表名查询,在关联表外加个select查询。 select * from tab1 a inner join (select * from tab2) b on a.fld1=b.fld2  2、主表有条件先select一遍主表,关联表有条件最好放最后where后(注意:条件放最后和放关联表中查询有时是不一样的) select * from (select * from ta...
mysql慢查询日志 AND 一个mysql优化 (带条件的count)
慢查询日志记录的就是慢的语句 1.怎么样算是慢? ong_query_time :慢查询阈值,当查询时间多于设定的阈值时(s),记录日志。 log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。 2.如何开启? show variables like '%slow_query_log%'; set global slow_query_log=...
count(*)这么慢,我该怎么办?
问题的引出 在开发系统的时候,我们可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数。这时候你可能会想,一条select count(*) from t语句不就解决了吗? 但是,你会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢。然后你可能就想了,MySQL怎么这么笨啊,记个总数,每次要查的时候直接读出来,不就好了吗。所以,我们今天来分析以下count(*)语句到底...
MYSQL一次千万级连表查询优化(一)
概述:交代一下背景,这算是一次项目经验吧,属于公司一个已上线平台的功能,这算是离职人员挖下的坑,随着数据越来越多,原本的SQL查询变得越来越慢,用户体验特别差,因此SQL优化任务交到了我手上。 这个SQL查询关联两个数据表,一个是攻击IP用户表主要是记录IP的信息,如第一次攻击时间,地址,IP等等,一个是IP攻击次数表主要是记录每天IP攻击次数。而需求是获取某天攻击IP信息和次数。(以下SQL
Mysql查询优化——中间表方法优化count()统计大数据量总数问题
mysql 大数据性能优化
MySQL下LeftJoin的性能优化
今天遇到了一个问题,有一个Select语句执行超慢,在加了Index之后依然超慢。 数据库是MySQL,表a中有数据4000条,表b中有数据14000条 Select语句为select count(*) from a left join b on a.id=b.id  (语句1) 执行时间为30秒 如果将Select语句改为select count(*) from b left join
MySQL多表连接查询Left Join,Right Join(讲的一般般)
MySQL多表连接查询Left Join,Right Join MySQL中的连接查询 通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 数据库管理系统的一个标志。 在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在 一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带
mysql innodb count(*)速度慢的几个解决方案
mysql innodb count(*)速度慢且不准确的解决办法innodb引擎在统计方面和myisam是不同的,Myisam内置了一个计数器,所以在使用 select count(*) from table 的时候,直接可以从计数器中取出数据。而innodb必须全表扫描一次方能得到总的数量。要初步解决这个问题,需要做不同于myisam的一些工作: 1、使用第二索引(一般不使用主键索引),并且添...
MySQL INNER JOIN算法的效率分析
MySQL处理JOIN的方法如下:(摘自MySQL 5.1 参考手册中文版) 假定我们有一个如下形式的表T1、T2、T3的联接查询: SELECT * FROM T1 INNER JOIN T2 ON P1(T1,T2) INNER JOIN T3 ON P2(T2,T3) WHERE P(T1,T2,T3). 这里,P1(T1,T2)和P2(
MYSQL数据库-(十三)- join连接讲解、多表删除
目录一、连接二、多表删除一、join连接 连接条件 三种连接类型示意图 1、内连接:inner join mysql> select a.id,a.name from ceshi AS a inner join ceshi_two AS b on a.name = b.name;2、左外连接 mysql> select a.id,a.name from ceshi AS a left join ce
多表联合查询速度巨慢解决办法之一
在实际工作当中,有一次碰到了多表联合查询但两分钟才出来结果,但A表和B表都不算大,A表只有五万多条数据,B表只有两万条数据,从中查出符合条件的数据并不需耗时那么长.最后经组长指导才发现A表没有建立索引,最后用CREATE INDEX  索引名 ON 表名(字段名) 为A表添加了一个普通索引之后才解决了问题.         对索引的解释,我觉得                 http://w
MYSQL表连接(十二)LEFT JOIN
MySQL LEFT JOINMySQL的LEFT JOIN子句允许从两个或多个数据库表中查询数据。LEFT JOIN子句是SELECT语句的可选部分,该语句在FROM子句之后出现。假设我们打算从两个表:T1 和 T2 中查询数据。以下是连接两个表LEFT JOIN子句的语法:SELECT T1.c1, T1.c2, T2.c1, T2.c2 FROM T1 LE...
mysql多表count累计
SELECT ( SELECT count(*) AS m1 FROM table1 ) + ( SELECT count(*) AS m2 FROM table2 ); select(*): select括号里面的只能为一行一列,否则会报错; select * from ():可以返回多行多列。 另外mysq...
关于mysql链接查询极慢的原因
  在帮老师做网页的过程中,有一个是从数据库中查询未考试学生名单,这里用到两个数据库:学生(学号,姓名,院系),成绩(学号,成绩,考试时间)(PS:个人觉得整个数据库设计很不合理,这里体现了数据库设计的重要性,不然后期真的能逼死开发者)使用left join 进行链接。   本身查询语句没有毛病,数据量只有1万,但是在数据库中查询的时候竟然耗费20多秒,然后开始找原因。查询语句,优化后还是20s...
多表联接查询select count()
需求:在动态添加查询条件的情况下拼接hql语句,并计算出满足这些查询条件的记录数 之前代码: 1.在Action中拼接hql语句 String conditionsHql="from VerificationRecord vr                             left outer join fetch vr.operation  myopera         
MYSQL表连接(十一)INNER JOIN
MySQL INNER JOIN子句MySQL INNER JOIN子句将一个表中的行与其他表中的行进行匹配,并可以查询这两个表中的字段。MySQL INNER JOIN子句是SELECT语句的可选部分。它紧接在FROM之后。在使用MySQL INNER JOIN子句之前,必须指定以下条件:首先,必须指定出现在FROM子句中的主表。其次,您需要指定要与主表联接的表,该主表出现在INNER JOIN...
MySql中多表联查是要注意的事项
1.简单介绍一下多表联查的概念 当要查询的数据在多张表时,使用多表联查 2.多表联查的分类 MySQL联合查询 交叉联合查询 cross join 内连接联合查询 inner join (MySQL简写join) 外连接联合查询: 左外连接联合查询 left outer join (MySQL简写left join)                            右外连接联合查询 ...
对于多表联合查询Count函数返回NULL
SELECT id, msg_title, msg_type, content, start_tasktime, end_tasktime, create_psn, create_time, update_psn, update_time, STATUS, readNum, time_num, CASE release_status WHEN 0 THEN '未发布'...
Mysql多个LEFT JOIN使用ORDER BY不能使用索引导致查询过慢的解决方案
Mysql在多个LEFT JOIN的情况下使用ORDER BY排序,就算是其中一个表的主键也仍然使用file sort排序,数据量多的话就相当的慢。 优化前语句 SELECT * FROM a LEFT JOIN b ON a.id=b.a_id ORDER a.id DESC 优化后语句 SELECT * FROM a LEFT JOIN b ON a.id=b.a_id
mysql两表联查 将数据count=0的也显示。使用了Left join 也实现不了。
不是只掌握了left join 就可以解决的问题! 菜单表 :zc_dish 消费记录表:zc_card_record_detail_2019 需求:实时统计当天的销售菜品数量。 错误做法: 错误:我使用了left join,但是并没有将count=0的数据显示出来。 原因:是添加了时间。但是不添加时间又统计的不是当天的。 改进: 仍然不正确!!! 错误:...
mysql 的count(*)统计结果很慢?为什么
MySql的count统计结果起因:最近在学习mysql的数据库,发现在innodb表中大数据量下count(*)的统计结果实在是太慢,所以想找个办法替代这种查询,下面分享一下我查找的过程。实践:在给出具体的结论之前,我们先看看下面的现象。一. 创建数据库创建数据库的表语句如下:create database IF NOT EXISTS MY_TEST default charset utf8 C
多表 JOIN 查询统计要记得去重
多表 JOIN 查询统计要记得去重 SELECT p.id projectId, ccr.commit_time changeDate, sum(ccr.line_count) changeLine, now() gmtCreate, now() gmtModified ...
MySQL基础(三)多表查询(各种join连接详解)
Mysql 多表查询详解 一.前言  二.示例 三.注意事项 一.前言  上篇讲到Mysql中关键字执行的顺序,只涉及了一张表;实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有哪些分类? 1.2 针对这些分类有哪些连接方法? 1.3 这些连接方法分别作用于哪些应用场景? 这篇针对这三个点通过实例来讲述,目的是穷尽所有的场
MySQL中join多个表的情况
inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 INNER JOIN 语法: INNER JOIN 连接两个数据表的用法: SELECT * FROM 表1
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...
Mysql联接查询-JOIN-从多个关联的表中查询数据
将要存储的信息分类存储在不同的表中,不同的表之间通过主键和外键关联,这样就构成了关系型数据库。 例如,建立两个表,一个存储供应商信息,另外一个存储产品信息。vendors表包含供应商信息,每个供应商占一行,每个供应商具有唯一标识,此标识被称为主键(primary key)。products表只存储产品信息,他除了存储供应商ID(vendors表主键)之外,不存储其他供应商的信息。vendors表
MYSQL 多表联合查询实例 left join ,group by语法
最近一个多月的时间都在做跟mysql有关的事情,一个比较简单的数据查询工作对于我这种超级小菜鸟来说,也算是经历了千难万险。感觉自己学到不少东东,so拿出来晒一晒,求拍砖。。。嘻嘻 就从我遇到的一个个困难说起。。。。 1.几张表联合查询时候代码的简约。 记得某天跟几个boss一起吃饭的时候,他所:乃们现在的小同学,都不大知道什么leftjoin啊,having啊什么的,范式更是了解甚少
MySql的count(*)统计结果很慢?为什么
最近在学习mysql的数据库,发现在innodb表中大数据量下count(*)的统计结果实在是太慢,所以想找个办法替代这种查询,下面分享一下我查找的过程。
mysql多表关联更新和in效率问题
#重新下发投放配置,只下放投放状态的单子 1.单表where查询更新 UPDATE bus_execute_sync b SET b.flag = 0 WHERE b.execid IN(SELECT id FROM bus_execute a WHERE a.status IN('10','20','21','22','23','24','25')); 2.表关联更新 UPDATE bu
mysql count 慢的优化(使用二级索引)
发现了mysql innodb count统计特别慢(无论count(1)还是count(*)),总结一下优化 一般采用二级索引去count: 比如:id 是pk aid是secondary index 采用 select count(*) from table where id >=0; 跟 select count(*) from table; 效果是一样的,都是默认使用p...
[MySql]多表联查:join、left join、right join的用法
多表联查:join、left join、right join的用法
数据库多表连查SQL运用Join语句和聚合语句(Group By)
现在设有简单的表(里面的主键外键就不写了): Create table Employee( EmpID int, EmpName nvarchar(10), DepID int); Create table Department( DepID int, DepName nvarchar(10)); Create talbe Manager( EmpID in
mysql使用GROUP_CONCAT和left join进行联合多表查询,(处理多表查询时,某表数据为空null值处理以及结果集多条数据展示在一行的处理)
mysql使用GROUP_CONCAT和left join进行联合多表查询 (处理多表查询时,某表数据为空null值处理以及结果集多条数据展示在一行的处理) 文章是按照需求分析以及跳坑顺序情景再现的顺序来写的. 如果你不是小白,你可以直接跳到最后看一下代码看个思路. 有三个表,分别是 buyer表,记录用户的信息 buyerstags表,记录用户有哪些标签,标签是谁赋予的.是一个用...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 学习java看很慢 java学习进步很慢