MySQL两千万数据优化&迁移

  • 时间:
  • 浏览:6

Copy

三. 总结

不过还是这样快,时间你这个 你这个 生命……还好大伙有自增ID(创建数据表第一条定律,一定要有自增字段),优化后的SQl如下:

一. 清除冗余数据,优化字段特征

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

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

SQL

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

二. 数据迁移

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

通过你这个 方法能解决数据量不多 的问题报告 ,之后随着limit的第1个 参数这样大,查询带宽单位会慢的吓人(后面 这条SQL执行会花35秒)。时间你这个 你这个 生命,于是大伙结束英文英语 优化SQL搞笑的话,优化后变成下面以前:

10000W数据中,能作为查询条件的字段大伙是预知的。你这个 你这个 将这偏离 数据单独创建新的字段,对于有规则的数据合理改变字段特征,比如身份证你这个 你这个 varchar(18)。对于不重要的数据大伙合并后处于1个 特征为text的字段。

PHP

SQL

Copy

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

SQL

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

SQL

大伙都并能 通过MySQL的limit语法分批获取。比如每次获取1000000,SQL搞笑的话如下:

对于你这个 有关联的数据大伙并能 计算,常见的比如身份证种能获取到准确的性别,出生地、生日、年龄。

Copy

PHP

SQL

大伙从数据库中取出一条旧数据,再通过计算解决后得到想要的新数据,最后将新数据插入新表。不过在获取新数据时遇到如下问题报告 。

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

最后效果不为什么么么在好,MySQL的『绑定变量』并没带来明显的带宽单位提升,不过能有效的解决SQL注入;

Copy

SQL

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

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

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