MySQL两千万数据优化&迁移

  • 时间:
  • 浏览:0

SQL

PHP

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

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

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

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

5000W数据中,能作为查询条件的字段.我都是预知的。所以 将这次责数据单独创建新的字段,对于有规则的数据合理改变字段形状,比如身份证就说 varchar(18)。对于不重要的数据.我都合并后居于一一个多多形状为text的字段。

.我都还要能通过MySQL的limit语法分批获取。比如每次获取500000,SQL搞笑的话如下:

SQL

最近有一张5000W条记录的数据表需要优化和迁移。5000W数据对于MySQL来说很尴尬,原应合理的创建索引时延还是挺快的,再为何优化时延也得没办法 多大提升。不过什么数据有血块的冗余字段和错误信息,极不方便做统计和分析。所以 我需要创建一张新表,把旧表中的数据一根绳子 一根绳子 取出来优化后放回新表;

三. 总结

Copy

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

现在刚开始肯定会想你你这些方案一定不行,原应每次插入一定会有一次数据库IO操作。但会 该方案有个好处是能及时发现有问題的数据,修改后再继续执行; 在Oracle中使用『绑定变量』能带来性能提升,正好MySQL也提供了『绑定变量』的功能。于是在不改变逻辑的请况下,尝试优化数据存储时延。代码如下:

SQL

Copy

SQL

组装一一个多多大的SQL文件,最后通过MySQL自带的工具导入也是极好的。但原应有一根绳子 SQL有问題,你原应需要重跑一次脚本。原应在9G大小的文本文件中修改一一个多多符号是很痛苦的事情……

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

对于所以有关联的数据.我都需要计算,常见的比如身份证种能获取到准确的性别,出生地、生日、年龄。

二. 数据迁移

不过还是飞快,时间就说 生命……还好.我都有自增ID(创建数据表一根绳子 定律,一定要有自增字段),优化后的SQl如下:

最后效果不为何好,MySQL的『绑定变量』并没带来明显的时延提升,不过能有效的除理SQL注入;

SQL

Copy

一. 清除冗余数据,优化字段形状

通过你你这些方法能除理数据量太满的问題,但会 随着limit的第一一个多多参数没办法 大,查询时延会慢的吓人(中间这条SQL执行会花35秒)。时间就说 生命,于是.我都现在刚开始优化SQL搞笑的话,优化后变成下面原来:

.我都有本身方案去将新数据存入新表,分别如下:

.我都从数据库中取出一根绳子 旧数据,再通过计算除理后得到你能能的新数据,最后将新数据插入新表。不过在获取新数据时遇到如下问題。

Copy

PHP

SQL