比如大量数据直接 bcp导入肯定效率猛增.以前我用sqlserver有.mysql 有没有呢, 然后, mysql 的这个bcp方式有没有可以方便程序调用的接口?

解决方案 »

  1.   

    MYSQL中有SQL语句 
    select ....    INTO OUTFILE 'file_name' export_options
      

  2.   

    在WINDOWS的命令下你可以直接c:\xx\dd\ss\mysql.exe -uroot -p1234 db1 -e "SELECT * INTO OUTFILE 'data.txt';"
      

  3.   

    select * into outfile 'aa.txt'
    fields terminated by ','
    from tb;
      

  4.   

    谢谢LSdata.txt 有严格的格式 要求吗?比如:
    针对 id,name,desc,value,date 等几列.  
    这个txt的格式可不可以是:  12,飞机,飞机很大,100010,2012-06-09 12:22:12 333另外,如果我用一次提交几千条sql语句的方式来进行批量导入 要比bcp的方式慢多少呢?另外, 这个 data.txt 作为一个参数写在那个bcp语句的后面 也相当于命令mysql自己去打开这个文件,并且把文件内的内容直接导入到数据库. 但其实这样完全是浪费IO操作. 我程序还得写规定格式的txt文件到指定目录,然后再启动线程循环的把data.txt通过bcp提交到mysql.有没有什么办法能够 绕过那个写文件的IO操作,而把 程序内存里面的data不用存储成data.txt而直接导入数据库呢.而且还要求有bcp这么快.
      

  5.   

    快是肯定的  但是不会猛增的
    load data '/home/123.txt' into table tbname(coun1,coun2)
      

  6.   

    MYSQL中目前只有这个方法,因为MYSQL的数据文件格式并不由MYSQL自身来定义,可以安装任何存储引擎。
      

  7.   

    谢谢, 大致知道了.
    ------------------
    另外,如果我用一次提交几千条sql语句的方式来进行批量导入 要比bcp的方式慢多少呢?这个有个大概的量化标准吗?比如我用java的PreparedStatement.addBatch() 然后再executeBatch()
    这样的话 实际应该是等效于 一次请求 N 条insert 语句. -- 应该能比 for循环执行 一条条请求要快. (但本身是连接池 所以应该也快不到哪去.)而我是问,这样批量提交的N条insert语句 如果换为 bcp 方式的话 究竟要快多少呢?因为理论上来说: java 自己去写磁盘IO 代价很小.  然后BCP把磁盘上的txt导入进mysql代价也不大.但这2者加起来的总消耗 究竟会比  批量提交 insert 快半分之多少呢?
      

  8.   

    参见MySQL手册:7.2.19. Speed of INSERT Statements
      

  9.   

    将记录存入TXT 文件,用LOAD DATA INIFILE导入