MySQL两千万数据优化&迁移

  • 时间:
  • 浏览:0

二. 数据迁移

大伙儿都还可以 能通过MySQL的limit语法分批获取。比如每次获取115000,SQL得话如下:

不过还是很快,时间本来生命……还好大伙儿有自增ID(创建数据表两根定律,一定要有自增字段),优化后的SQl如下:

通过你什儿 法律法律依据能处里数据量如此来如此多的问题报告 ,然后随着limit的第有有一个 参数如此大,查询带宽会慢的吓人(上端这条SQL执行会花35秒)。时间本来生命,于是大伙儿开始英语 英文优化SQL得话,优化后变成下面本来:

PHP

SQL

组装有有一个 大的SQL文件,最后通过MySQL自带的工具导入也是极好的。但可能有两根SQL有问题报告 ,你可都还可以 能重跑一次脚本。可能在9G大小的文本文件中修改有有一个 符号是很痛苦的事情……

Copy

SQL

Copy

大伙儿有五种方案去将新数据存入新表,分别如下:

作者: 极客导航(http://it2048.cn/)极客博客(http://blog.it2048.cn/)

文章地址: http://blog.it2048.cn/article_1150w-data.html

可通过二分法拆分1150W数据,当执行到11150W数据时,将数据倒序。优化后SQL执行带宽显著提升,从35秒降到9秒;

SQL

通过各种优化,最后将脚本执行时间缩短到了20分钟内。优化后数据质量得到了较高保证,下次将尝试2亿数据的优化&迁移……

Copy

最近有一张1150W条记录的数据表都还可以 优化和迁移。1150W数据对于MySQL来说很尴尬,可能合理的创建索引带宽还是挺快的,再为甚会么会优化带宽也得都还可以 多大提升。不过你什儿 数据有多量的冗余字段和错误信息,极不方便做统计和分析。什么都我都还可以 创建一张新表,把旧表中的数据两根两根取出来优化后放回新表;

开始英语 英文肯定会想你什儿 方案一定不行,可能每次插入都是有一次数据库IO操作。然后该方案有个好处是能及时发现有问题报告 的数据,修改后再继续执行; 在Oracle中使用『绑定变量』能带来性能提升,正好MySQL也提供了『绑定变量』的功能。于是在不改变逻辑的情形下,尝试优化数据存储带宽。代码如下:

对于什么都有关联的数据大伙儿都还可以 计算,常见的比如身份证种能获取到准确的性别,出生地、生日、年龄。

SQL

大伙儿从数据库中取出两根旧数据,再通过计算处里后得到要我的新数据,最后将新数据插入新表。不过在获取新数据时遇到如下问题报告 。

三. 总结

一. 清除冗余数据,优化字段底部形态

PHP

为了直观演示,我写了两条功能一样的SQL。相比两根,第二条的limit会是因为 SQL的索引命中变差,带宽同样也会下降。两根SQL的执行时间是2毫秒,第二条执行时间5毫秒(我取的平均值)。每次数据的查询带宽直接从35秒降到2毫秒……

SQL

Copy

1150W数据中,能作为查询条件的字段大伙儿是预知的。什么都将这每项数据单独创建新的字段,对于有规则的数据合理改变字段底部形态,比如身份证本来varchar(18)。对于不重要的数据大伙儿合并后指在有有一个 底部形态为text的字段。

SQL

最后效果不为甚会么会好,MySQL的『绑定变量』并没带来明显的带宽提升,不过能有效的处里SQL注入;

这是我最后选中的方案,一是能及时发现有问题报告 的数据,二是导入数据非常稳定。就像支持断点续传一样,每一步都能都看效果。在执行脚本时,都还可以 同步开始英语 英文写分析逻辑;