我正在尝试减少我正在执行的进程中的数据库查询数量,该进程每 X 次都必须执行大量(大约 4000 - 8000 次)INSERT 或 UPDATE。
我已经设法通过以下方式将它们分组为 1000 个插入的查询来减少 INSERT 部分:
INSERT INTO hist_proceso(pc, fecha_comp, resultado, historico) VALUES (?, ?, ?, ?), (?, ?, ?, ?), (?, ?, ?, ?), (?, ?, ?, ?), (?, ?, ?, ?), (?, ?, ?, ?) ........ ;
这样,从 4000-8000 个刀片减少到只有 4-8 个。
我在尝试使用 UPDATE 执行此操作时遇到问题,因为我无法使用如下查询:
UPDATE hist_proceso SET resultado=0, historico='aa';
由于要更新的每个元素都有不同的值。
“结果”列的值可能为 {0,1},而在“历史”列中,这些值将以这种方式连接起来:HH:mm/0;HH:mm/1;HH:mm/0 ; HH:mm/0;
有什么建议吗?
不幸的是,您只能
INSERT
以这种方式优化 s,UPDATE
您只能通过按任务分组来优化它们。即:
因此,您将为
resultado
字段等于 'aa'、'bb'、'cc' 和 'dd' 的所有记录分配 0historico
,并将值 1 分配给字段historico
等于 'ee'、'ff的记录'、'gg' 和 'hh'。通过这种类型的分组,我将八个查询减少到两个。
您也可以使用
UPSERT
orINSERT ... ON [CONFLICT] DO UPDATE ...
:但是您必须确保主键由正确的字段组成,并且您必须将它们排除在
DO UPDATE
.在插入期间,会创建一个名为的表,
EXCLUDED
其中临时存储尚未插入的值以在更新期间使用。在这种情况下,我们使用新值更新并忽略旧值。