zoukankan      html  css  js  c++  java
  • MySQL处理大量数据的效率问题

    最近在处理项目组的一个数据集,数据量每张表在百万级,由于数据量较大在数据下载和处理方面都可以说是旷日持久,这篇记录一下相关的经验。

    数据下载


    拿到的数据是在远程数据库里面,原先打算直接从远程库里下载csv或txt到电脑上,但在mysql上进行这样的操作好像不是很方便速度也很慢。

    目前在使用的方法是将远程数据库里面的数据导出为sql到本地,导入本地数据库后进行操作,但这一过程也很缓慢,一个百万级数据库在navicat里面可能要导个半个小时,在命令行可能会快一点但没有尝试。

    MySQL中的去重


    参考了这篇文章,http://ningg.top/mysql-data-cleaning/

    基本思路是复制原表A结构新建一个表B,对表B添加UNIQUE约束,然后将表A中的数据逐条插入表B,约束会自动实现去重。

    #复制表结构
    CREATE TABLE newTable LIKE oldTable;
     
    #修改表字段,因为httpURL太大
    ALTER TABLE newTable MODIFY httpURL VARCHAR(300);
     
    #为表格添加约束条件(在Mysql5中,如果约束字段过大,则报错,因此要先执行上面的修改表字段)
    ALTER TABLE newTable ADD UNIQUE(IP,timeStart);
     
    #为新表中添加数据(约束条件自动去重)
    INSERT IGNORE newTable 
    SELECT * FROM newTable 
    ORDER BY IP,timeStart;

    测试的表数据量在三百万左右,去重后数据在二百万左右,在navicat实现时间2168.470s,命令行应该会更快。

  • 相关阅读:
    Android设计模式系列-组合模式
    Android进阶之大话设计模式
    eclipse 安装lua插件
    防止应用被杀死
    lua string 库
    js与java通信
    一个祸害我很久的东东——事件过滤器之按键触发
    Qt主窗口
    新学期——新期望
    鱼C《零基础入门学习Python》10-17节课时知识点总结
  • 原文地址:https://www.cnblogs.com/heiheixiaocai/p/13494997.html
Copyright © 2011-2022 走看看