我试图了解类似之间的性能差异
INSERT INTO Person (id, name) VALUES
(1, "Kevin"),
(2, "John"),
(3, "Jane"),
...
和
BEGIN TRANSACTION;
INSERT INTO Person (id, name) VALUES (1, "Kevin");
INSERT INTO Person (id, name) VALUES (2, "John");
INSERT INTO Person (id, name) VALUES (3, "Jane");
...
END TRANSACTION;
我知道在交易期间索引是临时建立的,但我不太确定。我也不知道两者之间的其他性能差异。
使用事务消除了最昂贵的操作,事务日志刷新,但其他每个语句的操作仍然可以使多行插入比单行插入更有效。
在 SQL Server 中,多行插入可以更有效地修改索引,并更有效地插入行,因为锁定和闩锁是逐语句而不是逐行进行的操作所必需的。并且运行每条语句都有一些开销,因为 TSQL(默认情况下)是一种解释型语言。
此外,在每个语句之后,而不是在事务结束时,检查引用完整性约束并触发触发器。因此,甚至可能出现在单个语句中插入多行的行为与使用多个语句不同的情况。例如