Maison > base de données > tutoriel mysql > 从mysql读取大量数据时的实践_MySQL

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

WBOY
Libérer: 2016-05-30 17:10:46
original
1230 Les gens l'ont consulté

背景

 

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

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal