Rumah > pangkalan data > tutorial mysql > 从mysql读取大量数据时的实践_MySQL

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

WBOY
Lepaskan: 2016-05-30 17:10:46
asal
1234 orang telah melayarinya

背景

 

程序启动时,从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很大时。

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan