在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;