开发者社区> 问答> 正文

copy和insert哪个效率高?

copy和insert哪个效率高?

展开
收起
德哥 2015-12-29 09:12:52 4924 0
2 条回答
写回答
取消 提交回答
  • 顾名思义,copy可以是从最底层的存储直接进行的整体拷贝,而insert每一次插入的每一条记录都需要在现有数据基础中去重新寻址写入,肯定是copy效率高。

    2019-07-17 18:23:16
    赞同 展开评论 打赏
  • 公益是一辈子的事, I am digoal, just do it. 阿里云数据库团队, 擅长PolarDB, PostgreSQL, DuckDB, ADB等, 长期致力于推动开源数据库技术、生态在中国的发展与开源产业人才培养. 曾荣获阿里巴巴麒麟布道师称号、2018届OSCAR开源尖峰人物.
    COPY效率高.
    例如 : 
    digoal=> create table copy_insert_compare(id int,info text);
    CREATE TABLE
    digoal=> insert into copy_insert_compare select generate_series(1,1000000),'digoal_test';
    INSERT 0 1000000
    copy到文件
    digoal=# copy digoal.copy_insert_compare to '/home/postgres/copy_insert_compare';
    导出为insert语句
    pg_dump -f ./copy_insert_compare.sql -F p -E UTF8 -t digoal.copy_insert_compare --inserts -h 127.0.0.1 -U digoal digoal
    -rw-r--r-- 1 postgres postgres  19M Dec 13 12:07 copy_insert_compare
    -rw-rw-r-- 1 postgres postgres  61M Dec 13 12:09 copy_insert_compare.sql
    首先文件大小就相差几倍.
    COPY导入时间,
    digoal=# copy digoal.copy_insert_compare from '/home/postgres/copy_insert_compare';
    COPY 1000000
    Time: 1456.939 ms
    insert导入时间,
    postgres@db-172-16-3-150-> date;nohup psql -h 127.0.0.1 digoal digoal -f ./copy_insert_compare.sql >/dev/null 2>&1;date;
    Tue Dec 13 12:14:48 CST 2011
    Tue Dec 13 12:16:56 CST 2011, 128秒
    单一事务insert导入时间,(开始部分加入begin;结束部分加入commit;)
    postgres@db-172-16-3-150-> date;nohup psql -h 127.0.0.1 digoal digoal -f ./copy_insert_compare.sql >/dev/null 2>&1;date;
    Tue Dec 13 12:17:23 CST 2011
    Tue Dec 13 12:19:28 CST 2011, 125秒
    insert 慢了将近100倍。
    2019-07-17 18:23:16
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载