前言

本文主要给大家介绍了关于Mysql提升大数据表拷贝效率的相关内容,分享出来供大家参考学习,我们大家在工作上会经常遇到量级比较大的数据表 ;

场景: 该数据表需要进行alter操作 比如增加一个字段,减少一个字段. 这个在一个几万级别数据量的数据表可以直接进行alter表操作,但是要在一个接近1000W的数据表进行操作,不是一件容易的事;

可能情况:

1.导致数据库崩溃或者卡死

2.导致其他进程 进行数据库读写I/O变慢

3.还有一个可能就是数据格式不一致 导致数据无法写入(比如一个varchar类型要改为int类型,当数据长度过大时会报错)

解决方案:--

1.重新创建一张数据表 create new_table select * from old_table 这种形式相当于复制一张新的数据表 ----(不建议): 这里面仅仅复制数据表的字段和数据 , 但是表结构 主键,索引和默认值都不会拷贝过来

2.分成两个步骤

1). create new_table like old_table 创建一个新表,表结构和old_table一致(包含主键,索引和默认值等)

2). insert into new_table select * from old_table 把old_table的数据全部拷贝到new_table里面去

----(如果数据量少的话,在几万行左右建议使用此方案, 如果数据量到达数百万 上千万时, 这个也是不适用的)

扩展: 如果你只要拷贝一部分数据表的话,可以指定 insert into new_table (字段1,字段2) select 字段1,字段2 from old_table [limit n,m] ;

3.

1).通过select from into outfile 命令来导出数据表数据

2).通过load data infile into 命令来导入数据表数据

不多废话 直接看图,感受下100万左右的数据量 方案2 和 方案3 处理速度相差多少

>select * from money_info into outfile '/var/lib/mysql-files/money.txt'; >create table money_info_cyq11 like money_info;>load data infile '/var/lib/mysql-files/money.txt' into table money_info_cyq11;

注:这里还存在一个问题

outfile的目录是有要求的

>show variables like '%secure%';


总结

更多相关文章

  1. Android开发效率—Eclipse快捷键
  2. 基于“ViewHolder”技术提升Android(安卓)ListView中Item View加
  3. android SQLite查询
  4. Android(安卓)NDK
  5. ArrayMap是如何提高内存的使用效率的?
  6. 关于Android中SharedPreferences提交数据效率的调研
  7. KJFrameForAndroid(安卓)1.3beta 发布,Android高执行效率框架
  8. android 一个SQLite数据库多个数据表的基本使用框架 (带demo)
  9. Android庖丁解牛之WindowBackground

随机推荐

  1. android broadcastReceiver生命周期及两
  2. Android studio开发找不到HttpClient问题
  3. android 数字键盘使用
  4. [Android]Kernel的下载和编译
  5. 马达 vibrator的android的timed_output实
  6. android中从图库中选取图片
  7. 与屏幕有关的设置:禁止横竖屏切换;横竖屏切
  8. 原始Android的目标机代码结构
  9. Android jni系统变量、函数、接口定义汇
  10. Android使用ADB启动应用程序