TL;DR - 不清楚 CodeIgniter (CI) 方法是否比一系列 UPDATE 查询更有效。另外,CI方法不如UPDATEs的循环系列清晰。
说 Laravel “继续连接”是不正确的——它会在请求开始时打开一个连接并继续使用该连接直到请求完成。我认为您的意思是您正在向服务器发送大量查询。
这样做是真的:
INSERT INTO table VALUES (1, ...);
INSERT INTO table VALUES (2, ...);
INSERT INTO table VALUES (3, ...);
...
INSERT INTO table VALUES (n, ...);
会比这样做效率低:
INSERT INTO table VALUES (1, ...),
(2, ...),
(3, ...),
...
(n, ...);
但这不是一个简单的INSERT。在您发布的链接中查看 CI 库生成的代码。我们正在研究的是以下之间的效率差异:
UPDATE table SET value=1 WHERE id=1;
UPDATE table SET value=2 WHERE id=2;
UPDATE table SET value=3 WHERE id=3;
...
UPDATE table SET value=n WHERE id=n;
和
UPDATE table
SET value = CASE
WHEN id = 1 THEN 1
WHEN id = 2 THEN 2
WHEN id = 3 THEN 3
...
WHEN id = n THEN n
ELSE value END
WHERE id IN (1, 2, 3, ..., n);
我不是 SQL 专家,但我不相信第二个比第一个更有效。 WHEN 子句的长链将由 SQL 服务器处理 - 一堆简短的 UPDATE 语句(在我看来)会更有效,特别是当您在 @ 中使用索引列时987654330@子句。
最后,查看 CI 文档,update_batch 方法对您传递给它的数据结构做了一些假设 - 例如,数组中的第一项是更新语句的键。当您在六个月后查看您的代码时,这一点(至少对我而言)不会很清楚。