zoukankan      html  css  js  c++  java
  • (转载)提高mysql插入数据的速度

    (转载)http://blog.csdn.net/bhq2010/article/details/7376352

    需要在mysql中插入2000万条记录,用insert语句插入速度很有限,每秒钟几百条,放在hadoop集群上跑也是这个速度,可能是数据库的问题了,网上看到sql server和oracle的insert速度也不是很快。比较简单的优化方法如下:

    1、在一条insert语句中插入多条记录

    INSERT INTO tablename (field0, field1, ...) VALUES
    (value0, value1, ...),
    (value0, value1, ...),
    (value0, value1, ...),
    ...
    (value0, value1, ...)


    这样插入速度可以提高很多倍,但还是不够块,对于2000万条记录,每秒钟一两千条的插入速度还是太慢。

    2、从文本文件导入数据

    mysql可以从文本文件直接导入记录,不过需要文本文件是行记录,并且每个字段之间用相同的字符隔开、每行之间也用相同的字符隔开。

    写了个程序把文本文件的格式处理一下,就可以在mysql客户端使用如下语句导入数据了:

    mysql> LOAD DATA LOCAL INFILE 'fileName' INTO TABLE 'tableName' FIELDS TERMINATED BY '	' LINES TERMINATED BY '
    ';

    其中' '和' '分别是字段和行的分隔符,在不同的情况下可能不一样。

    用这种方式,感觉导入的速度主要和文件的大小有关,和记录的条数关系不太(可能是2000万的记录还不够多吧。。)

    导入一个800MB的文本文件(2000万行),在单机上预处理用了3分钟,导入数据库用了7分钟(机器配置是i5-2400CPU、8GB内存、硬盘读取速度大约90MB/S)

    下面还要处理一个11GB的文本文件,这回估计要用集群跑了。

  • 相关阅读:
    bzoj2595 / P4294 [WC2008]游览计划
    bzoj4698 / P2463 [SDOI2008]Sandy的卡片
    [bzoj3514]Codechef MARCH14 GERALD07加强版
    [bzoj2440][中山市选2011]完全平方数
    [bzoj2243][SDOI2011]染色
    [bzoj2589]Spoj 10707 Count on a tree II
    [bzoj1452] [JSOI2009]Count
    [bzoj2588][Spoj 10628] Count on a tree
    [bzoj2434][Noi2011]阿狸的打字机
    Codeforces Round #408(div.2)
  • 原文地址:https://www.cnblogs.com/Robotke1/p/3171773.html
Copyright © 2011-2022 走看看