Mysql大数据处理与优化
Mysql大数据处理与优化:遇到一个问题,服务器端是Mysql数据库。某张表中有将近2000W条记录,现在表中有大量冗余数据需要剔除掉(Version update, Data garbage),如果处理这2000W条记录呢?
一、一次性取出数据(Select * from table)肯定不行,数据量太大会导致内存溢出。于是就分批取出数据。
[cpp]select * from table where…limit pos,size [/cpp]
pos为记录开始的index,size为多少条记录。
思考:这样的话,程序就能跑起来了,但是速度还是很慢,因为C++程序员取的是:0,100(要对数据进行处理),大概需要几天甚至更多的时间才能处理完毕!
二、他人分享的优化经验:
- 表建立索引,在没有建索引的情况下,数据库查找某一条数据,就必须进行全表扫描了,对所有数据进行一次遍历,查找出符合条件的记录。
- 如果有ID字段,且连续,最好这样,select * … id>0 and id <=5000
- 如果有ID字段,但是不连续,最好用先查询出ID号,然后select *…in [id1,id2,id3,id4…]。
三、最后C++程序员的选择是这样的:
ID做主键,建立索引,然后类似这样查询。[cpp]select * … between 1000000 and 1000100 [/cpp]
四、对Mysql无经验,以上解决方案来源于网络,希望得到大牛的指导!
参考资料:[MySQL性能优化的最佳21条经验]