JAVA MYSQL sql_calc_found_rows和found_rows()实践

针对百万级数据库响应慢的问题,文章详细描述了如何使用sql_calc_found_rows和found_rows()来优化SQL查询。通过分析接口响应时间过长,发现原本的查询方式导致执行时间较长。通过查询资料,了解到需要在同一会话中执行SQL以获取正确总条数。优化尝试中,避免使用JDBCTemplate的query()方法,改为手动管理会话,确保两次SQL执行在同一会话内,成功减少了响应时间。
摘要由CSDN通过智能技术生成

一、背景

  1.百万级数据库,数据量持续增加。每张数据表的字段数大于50(时间字段,分组字段,指标字段)

  2.JDBCTemplate,java,mysql

二、问题描述

  通过分析接口返回数据响应时间过长(通过某个分组字段搜索数据,响应时间长达30s)。

三、检查问题

  检查代码,发现代码中运行了两句SQL语句,一句通过select查询数据,一句通过select count(1)来获取返回数据的总条数。

  通过navicat查询语句对应的执行时间。

SELECT eventtime,smart_card_id,uevt_1000 FROM analytics_vhsession_user_event_info_day_201901 WHERE eventtime>='2019-01-01 00:00:00' AND eventtime<'2019-01-31 23:59:59' AND smart_card_id = '0382205801' ORDER BY eventtime asc LIMIT 0,1000
> OK
> 时间: 10.603s


SELECT count(1) FROM analytics_vhsession_user_event_info_day_201901 WHERE eventtime>='2019-01-01 00:00:00' AND eventtime<'2019-01-31 23:59:59' AND smart_card_id = '0382205801'
> OK
> 时间: 11.13s

  同样耗时10s+,所以想办法从select count(1)入手,减少SQL执行时间以达到减少响应时间的目的。

四、查询资料

  通过查询资料,可以通过使用sql_calc_found_rowsfound_rows()替代select count(1)

  通过navicat查询语句对应的执行时间。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值