Mysql大数据处理与优化

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条经验]