首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    数据量查询容易OOM?试试MySQL流式查询

    一、前言 程序访问 MySQL 数据库时,当查询出来的数据量特别时,数据库驱动把加载到的数据全部加载到内存里,就有可能会导致内存溢出(OOM)。...其实在 MySQL 数据库中提供了流式查询,允许把符合条件的数据分批一部分一部分地加载到内存中,可以有效避免OOM;本文主要介绍如何使用流式查询并对比普通查询进行性能测试。...三、性能测试 创建了一张测试表 my_test 进行测试,总数据量为 27w 条,分别使用以下4个测试用例进行测试: 大数据量普通查询(27w条) 大数据量流式查询(27w条) 小数据量普通查询(10...条) 小数据量流式查询(10条) 3.1....查询耗时 10 条数据量用时 1 秒 ? 四、总结 MySQL 流式查询对于内存占用方面的优化还是比较明显的,但是对于查询速度的影响较小,主要用于解决大数据量查询时的内存占用多的场景。

    2.3K20

    mysql数据量分页查询优化总结

    Mysql的分页查询十分简单,但是当数据量大的时候一般的分页就吃不消了。...传统分页查询:SELECT c1,c2,cn… FROM table LIMIT n,m MySQL的limit工作原理就是先读取前面n条记录,然后抛弃前n条,读后面m条想要的,所以n越大,偏移量越大,...1)limit语句的查询时间与起始记录的位置成正比 2)mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。...因为利用索引查找有优化算法,且数据就在查询索引上面,不用再去找相关的数据地址了,这样节省了很多时间。另外Mysql中也有相关的索引缓存,在并发高的时候利用缓存就效果更好了。...当然JOIN操作也可以通过子查询实现,不过书中介绍5.6之前版本的mysql相比子查询还是优先使用JOIN。

    1.5K30

    mysql查询优化-千万级数据量

    最近在忙其他项目,偶然发现之前的项目中,有个定时刷新告警信息的模块查询比较慢,简单的一个关联查询,尽然耗了20多秒才能出来, 才发现表的数据量已经达到了700万,我擦,我这暴脾气,不知道我强迫症吗,于是下定决心...30.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。...创建的索引返回的行越少越好,此时区分度。 用不上索引的列,不要创建索引。...= 6.对字段加函数或者运算的 在order by操作中,mysql只有在排序条件不是查询条件表达式时才使用索引。...handler_read_rnd_next:这个值越高,说明查询低效 案例分析 一张告警信息表,数据量为620万 查询数量,用时1s image.png 添加内连接,用时5s (device表700

    1.8K30

    MySQL 百万数据量的 count(*) 查询如何优化?

    但是我的数据量比这个大很多,而对数据的准确性要求就不那么高。所以首先要明确需求。...这个建议还是不要用了,翻了下mysql 的doc,40%的误差概率,碰上就有点了呀。 TABLE_ROWS The number of rows....; 在T1的时候,如果采用Mysql默认的事务隔离级别:读提交。...带条件count(*) 很多时候我们的业务场景不是数据量多,而是条件复杂。这其实就是一个查询优化的问题了,和是不是count(*)没有关系,那么有以下两招常用,这个得具体问题具体分析了。...结合mysql的一些索引查询知识,我们可以大致得出如下结论。 ? 建议直接使用count(*)。 相关阅读 为什么要用自增主键? 蚂蚁金服面试题: 一条SQL查询语句如何执行的 索引使用策略及优化

    12.7K41

    MySQL 百万级数据量分页查询方法及其优化

    方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺点...ORDER BY id_pk ASC LIMIT M 适应场景: 大数据量 原因: 索引扫描,速度会很快. prepare语句又比一般的查询语句快一点。...大数据量使用limit分页,随着页码的增大,查询效率越低下。...从中我们也能总结出两件事情: limit语句的查询时间与起始记录的位置成正比 mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。 2....因为利用索引查找有优化算法,且数据就在查询索引上面,不用再去找相关的数据地址了,这样节省了很多时间。另外Mysql中也有相关的索引缓存,在并发高的时候利用缓存就效果更好了。

    77020

    MySQL 百万级数据量分页查询方法及其优化

    数据库SQL优化是老生常谈的问题,在面对百万级数据量的分页查询,又有什么好的优化建议呢?下面将列举了一些常用的方法,供大家参考学习!...方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺点...ORDER BY id_pk ASC LIMIT M 适应场景: 大数据量 原因: 索引扫描,速度会很快. prepare语句又比一般的查询语句快一点。...大数据量使用limit分页,随着页码的增大,查询效率越低下。...从中我们也能总结出两件事情: limit语句的查询时间与起始记录的位置成正比 mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。 2.

    3.5K00

    MySQL百万级数据量分页查询方法及其优化

    方法一:直接使用数据库提供的SQL语句 语句样式:MySQL中可用如下方法: select * from table_name limit m, n; 适用场景:适用于数据量较少的情况(元组百/千级...limit m; 适应场景: 适用于数据量多的情况(元组数上万) 原因: 索引扫描,速度会很快....有朋友提出: 因为数据查询出来并不是按照pk_id排序的,所以会有漏掉数据的情况,只能方法3 方法三:基于索引再排序 语句样式,MySQL中可用如下方法: select * from table_name...order by id_pk asc limit m; 适应场景: 大数据量 原因: 索引扫描,速度会很快. prepare语句又比一般的查询语句快一点。...大数据量使用limit分页,随着页码的增大,查询效率越低下。

    2.7K20

    MySQL百万级数据量分页查询方法及其优化

    方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺点...ORDER BY id_pk ASC LIMIT M 适应场景: 大数据量 原因: 索引扫描,速度会很快. prepare语句又比一般的查询语句快一点。...大数据量使用limit分页,随着页码的增大,查询效率越低下。...从中我们也能总结出两件事情: limit语句的查询时间与起始记录的位置成正比 mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。 2....因为利用索引查找有优化算法,且数据就在查询索引上面,不用再去找相关的数据地址了,这样节省了很多时间。另外Mysql中也有相关的索引缓存,在并发高的时候利用缓存就效果更好了。

    4K10

    MySQL百万级数据量分页查询方法及其优化「建议收藏」

    方法一:直接使用数据库提供的SQL语句 语句样式:MySQL中可用如下方法: select * from table_name limit m, n; 适用场景:适用于数据量较少的情况(元组百/千级)...limit m; 适应场景: 适用于数据量多的情况(元组数上万) 原因: 索引扫描,速度会很快....有朋友提出: 因为数据查询出来并不是按照pk_id排序的,所以会有漏掉数据的情况,只能方法3 方法三:基于索引再排序 语句样式,MySQL中可用如下方法: select * from table_name...order by id_pk asc limit m; 适应场景: 大数据量 原因: 索引扫描,速度会很快. prepare语句又比一般的查询语句快一点。...大数据量使用limit分页,随着页码的增大,查询效率越低下。

    74410

    使用MySQL Server Side Cursor解决查询数据量过大造成OOM

    一、前言 前面介绍了MyBaits中两种使用游标的方式来避免搜查内容过大导致OOM,这两种方式被称为是客户端side的游标,因为mysql client每次从自己的接受buffer获取一条记录,这虽然解决了...OOM,但是会造成sqlserver服务器推送记录到client的时候阻塞,那么有没有一种方式可以让mysql server减少阻塞那,答案是肯定的。...二、MySQL Server Side Cursor 2.1 使用 要使用MySQL Server Side游标需要满足下面条件: 必须是select语句 设置了fetchSize>0 在mapper...useCursorFetch=true 数据集类型为ResultSet.TYPE_FORWARD_ONLY 数据集并发设置为ResultSet.CONCUR_READ_ONLY 在数据库链接后面设置:jdbc:mysql

    1.7K10

    MySQL 表如何优化查询效率?

    MySQL 表如何优化查询效率? 背景 XX 实例(一主一从)xxx 告警中每天凌晨在报 SLA 报警,该报警的意思是存在一定的主从延迟。...④receive_time 字段的基数,选择性好,可对该字段单独建立索引,select arrival_record sql 就会使用到该索引。...delete 表优化为小批量删除 应用端已优化成每次删除 10 分钟的数据(每次执行时间 1s 左右),xxx 中没在出现 SLA(主从延迟告警): 另一个方法是通过主键的顺序每次删除 20000 条记录...DELETE FROM arrival_record WHERE id<@need_delete_max_id LIMIT 20000; select ROW_COUNT(); #程序睡眠0.5s 总结 表数据量太大时...对表进行 DDL 操作时,要考虑表的实际情况(如对该表的并发表,是否有外键)来选择合适的 DDL 变更方式。 对大数据量表进行 delete,用小批量删除的方式,减少对主实例的压力和主从延迟。

    14410

    Mysql中使用流式查询避免数据量过大导致OOM-后续

    一、前言 之前http://www.jianshu.com/p/0339c6fe8b61 介绍了MySQL中三种使用流式方法,看起来很优雅,实则优雅的同时还是有一些注意事项的,下面就针对流式查询时候的注意事项进行介绍...二、 同一个连接在游标迭代数据过程中不能被复用 2.1 简单介绍 先贴下MySQL Connector/J 5.1 Developer Guide中原文: There are some caveats...可知第二次查询时候抛出了异常,说是RowDataDynamic@3e0c5a62 数据集还是激活状态,当一个连接上已经有一个打开的流式Resultset时候不能再发起一个查询,并且在尝试更多查询前确保调用了...而第一次查询不收影响继续自己的迭代数据。 那么就来看下在第二次查询前调用close方法会有啥效果。...四 、参考 https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-implementation-notes.html http

    4.6K21

    经典 MySQL数据量查询分页问题

    WHERE columnName = 'xx' limit 0,100 正常情况下没有问题,但是当数据量非常的时候,首先 count(*) 会非常慢这是肯定的,其次分页越多,limit 的效率就会越低...《高性能 MySQL》中对这个问题有过说明: 分页操作通常会使用 limit 加上偏移量的办法实现,同时再加上合适的 order by 子句。...但这会出现一个常见问题:当偏移量非常的时候,它会导致 MySQL 扫描大量不需要的行然后再抛弃掉。...join dep b on a.depno = b.depno order by a.id desc limit 100,25; 受影响的行: 0 时间: 0.001s 再来看下偏移量非常的情况...优化方案 使用覆盖索引 + 子查询 偏移量之前的数据是没有价值的,所以我们可以先在聚集索引中根据偏移量找到开始位置的 id 值,再根据这个 id 值去非聚集索引上查询所需要的行数据,这样就避免了大量的无用的回表查询

    55410
    领券