顾名思义,copy可以是从最底层的存储直接进行的整体拷贝,而insert每一次插入的每一条记录都需要在现有数据基础中去重新寻址写入,肯定是copy效率高。
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倍。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。