postgresql 批次说明书:使用单个与多个语句

xj3cbfub  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(2)|浏览(121)

在单个事务中,使用单个语句进行批量插入是否有显著的性能差异,例如:

-- BEGIN TRANSACTION

INSERT INTO films (code, title, did, date_prod, kind) VALUES
    ('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
    ('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');

-- COMMIT

或多个语句如下:

-- BEGIN TRANSACTION

INSERT INTO films (code, title, did, date_prod, kind) VALUES
    ('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy');

INSERT INTO films (code, title, did, date_prod, kind) VALUES
    ('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');

-- COMMIT
91zkwejq

91zkwejq1#

如果在一个开始/ COMMIT事务中执行多个INSERT操作(第二种方法),这两种方法之间的任何差异都将被有效地消除。
为什么呢?大部分的CPU和I/O工作都是在提交时进行的。如果您处于自动提交模式,则每个INSERT都会获得一个隐式提交以及与之相关的开销,除非您处于事务中。但是,单个事务中的多个数据操作语句只会产生一次开销。
如果您没有设置模式,您可能处于自动提交模式(除非您使用Python语言连接器)。

4nkexdtk

4nkexdtk2#

在性能方面,使用单个insert语句和多个值集通常比在一个事务中分别执行多个insert语句要快。
例如,假设我们有一个名为“films”的表,其中包含列“code”、“title”、“did”、“date_prod”和“kind”。我们想在这个表中插入两行。
使用单个insert语句,您可以执行以下操作:

INSERT INTO films (code, title, did, date_prod, kind) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');

这个插入语句将在一次操作中将两行都添加到“films”表中。
或者,使用多个insert语句,您可以:

INSERT INTO films (code, title, did, date_prod, kind) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy');

    INSERT INTO films (code, title, did, date_prod, kind) VALUES
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');

在这里,执行两个单独的insert语句,每个语句向“films”表添加一行。就性能而言,单个insert语句通常更快,因为它优化了操作并减少了开销。它只传送和准备插入一次,与在事务中单独执行多个语句相比,性能得到了改善。

相关问题