sql - 使用“BEGIN TRANSACTION”和“END TRANSACTION”来提高性能
问题描述
我正在阅读文章提高 SQLite 的每秒插入性能?提高我的 SQLite 的性能。
一个问题是:如果我需要执行以下查询:
INSERT INTO
INSERT INTO
...
INSERT INTO(more than 10000 times)
SELECT ...
SELECT
UPDATE ...
如果我想提高性能,我是否应该在所有代码的开头和结尾插入“BEGIN TRANSATION”和“END TRANSATION”,如下所示:
BEGIN TRANSACTION
INSERT INTO
INSERT INTO
...
INSERT INTO(more than 10000 times)
SELECT ...
SELECT
UPDATE ...
UPDATE ...
END TRANSACTION
或者我应该只为插入操作插入 BEGIN/END TRANSACTION 吗?
BEGIN TRANSACTION
INSERT INTO
INSERT INTO
...
INSERT INTO(more than 10000 times)
END TRANSACTION
SELECT ...
SELECT
UPDATE ...
UPDATE ...
解决方案
如果 INSERT 是针对同一张表,插入了相同的列,则使用一次插入将显着提高性能,这是因为每个单独的插入命令都包括从数据库来回执行的时间,比实际查询时间多得多。
根据服务器的限制(登录的其他进程等),我会设置插入行数的限制,例如一次 1000 行。
INSERT INTO table (col1, col2, col3,...) VALUES
{(v1, v2, v3,...), }X 1000;
比
{
INSERT INTO table (col1, col2, col3,...) VALUES
(v1, v2, v3,...);
}
X 1000
希望有帮助
推荐阅读
- node.js - 如何在节点 js 中使用 async 和 await 函数提取数据?
- mysql - 如何将一个表与另一个只有 1 个公共值的表连接起来
- mobile - 控制台打印以在 c 中显示信号电平
- android - 为什么当我生成一个签名的 APK 时它会生成一个 JKS 文件?
- php - 在上一页单击时如何显示正确的名称
- python - 使用漂亮的汤从表格中的行中的单元格获取值显示 {{row.value}} 作为结果
- build - 使用 helm 重建项目
- python - 在 Python 中更改堆积条形图图例
- java - 如何在android studio中解决“清单合并失败:”
- docker - 如何使用 docker 镜像运行 docker-compose?