Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在psql中,哪个更快:从选择中插入2个,还是从选择的并集中插入一个?_Sql_Performance_Postgresql_Insert - Fatal编程技术网

在psql中,哪个更快:从选择中插入2个,还是从选择的并集中插入一个?

在psql中,哪个更快:从选择中插入2个,还是从选择的并集中插入一个?,sql,performance,postgresql,insert,Sql,Performance,Postgresql,Insert,如标题所示:我有一个需要填充的表。我有两个数据来源要放在那张表里。哪个更快: INSERT INTO foo SELECT bar, baz FROM xxxx; INSERT INTO foo SELECT beq, que FROM yyyyy; 或: 我使用的是PostgreSQL 9.1。我认为union all比两个INSERT更快,因为它是一个事务而不是两个事务,但我根本不是DBA,我想这可能取决于表中的行数/列类型。在PostgreSQL 9.2.4上的SQL FIDLE上进行

如标题所示:我有一个需要填充的表。我有两个数据来源要放在那张表里。哪个更快:

INSERT INTO foo
SELECT bar, baz FROM xxxx;

INSERT INTO foo
SELECT beq, que FROM yyyyy;
或:

我使用的是PostgreSQL 9.1。

我认为union all比两个INSERT更快,因为它是一个事务而不是两个事务,但我根本不是DBA,我想这可能取决于表中的行数/列类型。在PostgreSQL 9.2.4上的SQL FIDLE上进行测试,每个表有1 000 000条记录。结果:

2个插入件~2600毫秒 1个插入式管接头~10800毫秒-消除重复件非常昂贵! 1个带活接头的插入件所有~2460 ms

请看

我想说union all比两个INSERT更快,因为它是一个事务而不是两个事务,但我根本不是DBA,我想这可能取决于表中的行数/列类型。在PostgreSQL 9.2.4上的SQL FIDLE上进行测试,每个表有1 000 000条记录。结果:

2个插入件~2600毫秒 1个插入式管接头~10800毫秒-消除重复件非常昂贵! 1个带活接头的插入件所有~2460 ms


请参见

在我的例子中,插入约7500行,差异约为2秒,所有的速度都更快

在我的例子中,插入约7500行,差异约为2秒,所有的速度都更快

执行计划说明了什么?您的查询是不相等的,因为union将删除重复项,如果您希望插入所有行,您可能希望使用union all,因此我想说第一个将更快,因为它是简单的插入,而不检查重复项:执行计划说明了什么?您的查询是不相等的,由于union将删除重复项,如果希望插入所有行,则可能需要使用union all,因此我认为第一个将更快,因为它是简单的插入,无需检查重复项:
INSERT INTO foo
SELECT * FROM (
SELECT bar, baz FROM xxxx
UNION
SELECT beq, que FROM yyyyy ) src;