欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

从mysql读取大量数据时的实践_MySQL

程序员文章站 2022-06-04 16:50:26
...
背景

程序启动时,从mysql读取所有的数据,在内存中建立数据结构。mysql表中至少有100w条记录。以后根据时间定期从mysql增量读取数据,刷新内存结构。

表结构为{uid, product, state, modify_time,primary key(uid, product), key(modify_time)}

方法一

因为增量的更新都是按照modify_time来的,所以直观的想到根据modify_time来分页读取,每次读取1w行记录,循环100次就能全部读取100w条记录。

于是select * from table order by modify_time limit 0,10000 直到limit 990000,10000。乍一看没什么问题。但是程序启动居然超过5分钟。用explain分析一下select语句的耗时,发现limit 990000, 10000时居然耗时几秒钟,确实用到了索引modify_time,但是扫描行数超过了5万多行。omg. 对于大数据量时,同一索引下有太多的数据,越往后查找越耗时。100w后数据就已经使系统不可用了。

方法二

表结构加一个字段,id自增类型,并建立唯一索引。查询语句变成select * from table where id >=m and id

结论

从mysql查询时要避免limit m,n, 当m很大时。

相关标签: 数据