SQL大数据量分页性能优化

目前在进行web api只读接口的改造,在改造过程中,发现改在后响应时间和之前区别不是很大,通过测试结果显示在sql的分页功能处找到原因,并对其进行优化,优化方案如下。

测试内容

此次运行时间对比采用平台资金记录最多的用户 user_id 36062

测试次数未5次  为避免索引缓存每次测试前更改 limit 的起始值,查询条数10不变。

5次结果取平均值优化前平均查询时间为0.287s

         优化后 sql1平均查询时间为0.012s

         优化后 sql2 平均查询时间为0.016s

结果显示:优化后的sql1和sql2查询效率明显高于优化前。

通过先查找到所有满足条件的索引,然后通过索引检索到所需要的数据,效率提高很多。

附:sql

sql

SELECT  * FROM  account_log WHERE user_id  =  36062ORDER BY id DESC LIMIT 3300, 10;

优化后的sql 1

SELECT * FROM account_log a JOIN ( SELECTid FROM rd_account_log WHERE user_id = 36062 ORDER BY id DESC LIMIT 3300, 10) bON b.id = a.id;

优化有sql 2

SELECT * FROM account_log WHERE user_id =36062 AND id <=(SELECT id FROM rd_account_log

WHERE user_id = 36062 ORDER BY id DESC LIMIT33416,1) LIMIT 10

总结

1、随着起始记录的增加,时间也随着增大, 这说明分页语句limit跟起始页码是有很大关系的;

1)limit语句的查询时间与起始记录的位置成正比
2)mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。

2、利用表的覆盖索引来加速分页查询
我们都知道,利用了索引查询的语句中如果只包含了那个索引列(覆盖索引),那么这种情况会查询很快。

因为利用索引查找有优化算法,且数据就在查询索引上面,不用再去找相关的数据地址了,这样节省了很多时间。另外Mysql中也有相关的索引缓存,在并发高的时候利用缓存就效果更好了。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
复杂SQL查询通常会涉及到大的数据,为了提高性能和减少资源消耗,在处理大数据分页时可以考虑以下几个步骤: 1. 使用索引:在大数据分页查询中,使用适当的索引可以大大提高查询效率,减少数据库的读取数据。根据实际需求,合理创建索引可以有效减少查询所需的时间。 2. 分批查询:可以将大数据分页查询拆分为多个小的查询操作,每次查询一定数的数据。一个常见的做法是以主键为基础,每次查询一定数的记录,并利用主键范围进行数据的筛选。 3. 使用子查询:有些复杂查询可能需要多个子查询来获取相关数据,对于大数据的查询,可以在子查询中进行分页操作,这样可以减少对整个数据集的查询压力。 4. 利用缓存:对于热门查询结果,可以将查询结果缓存在缓存中,避免重复查询大数据的问题。这样可以显著提高查询性能。 5. 合理设置分页参数:根据具体需求和查询结果的大小,合理设置每页显示的数据和当前页码等分页参数。过大的每页数据可能会导致数据库负载过大,而过小的页码可能会增加对数据库的请求数。 需要注意的是,针对复杂SQL查询的大数据分页,不仅需要合理地设计SQL语句和数据库结构,还需要结合具体场景和需求,进行适当的调优和测试,并进行性能监控和优化。只有通过不断的调整和优化,才能获得更好的查询效率和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值