mysql 高并发下查询很慢_mysql多表连接查询很慢,有更好的解决方案吗?

多表连接查询,关联用户,设备,设备运行数据等多个表(此表查询时有用到in关键字,用来区分设备状态),直接通过设备ID分组查询出该用户各个设备的最大运行时间,当数据量越来越大的...

多表连接查询,关联用户,设备,设备运行数据等多个表(此表查询时有用到in关键字,用来区分设备状态),

直接通过设备ID分组查询出该用户各个设备的最大运行时间,

当数据量越来越大的时候,查询速度就会越来越慢

(因为有用max,in等函数和关键字,部分索引不起作用,SQL语句已最优,单表最大数据条数1500万,还会越来越高)

然后没办法,就改用后台先查询出该用户的所有设备ID,再通过设备ID循环查询单个设备最大运行时间,

通过for循环对查询结果进行整合(改成这样后在单个用户访问时查询很快,多用户同时访问未测试)

这样的改为后台来循环查询访问数据库,在高并发的情况下是否可行?可有其他更好的解决方案?

后面是SQL语句:

SELECT

sa.id AS 'area.id',

sa.name AS 'area.name',

MAX(a.monitor_value) AS 'monitor_value'

FROM doss_card b //设备表

JOIN sys_user u ON u.id = b.create_by //用户表

JOIN sys_office o ON o.id = u.company_id //企业信息表

LEFT JOIN p_parse_result a ON a.dev_id = b.id //设备运行数据表(千万级以上,会越来越大)

LEFT JOIN sys_area sa ON sa.id = b.area_id //区域表

WHERE a.monitor_code IN ('S01-1TD','S01-2TD') //设备运行状态

AND b.del_flag = '0' AND b.auditing='1'

AND DATE_FORMAT(a.data_time,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')

AND (o.id = '8715f3f2cb274c80896f628f56b3f4a9' OR o.parent_ids LIKE '0,8715f3f2cb274c80896f628f56b3f4a9,%'

OR u.id = '47dd4dfa1a524e9e937e805841b7a440')

GROUP BY b.id //设备id分组

)a GROUP BY said //区域id分组

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值