我在服务器端使用php来管理MySQL数据。 我必须请求一个API,它给我一个用户列表。我需要检查每个用户是否在数据库中。 如果是,我会更新他的信息。 如果没有,我将他插入数据库。
问题是每次都有超过2000多个用户,我在PHP中的代码非常慢(有时我得到504网关超时)。 我们很快就会有更多用户。
如何让我的代码更快? Php好吗?
改进后编辑我的codeV3:
$userList = getFromAPI();
foreach ($userList as $userId){
$db = dbConnect();
$tagList = implode(",", $user["tagid_list"]);
$query = $db->prepare(
"INSERT INTO USERS(id, name, group) VALUES(:id, :name, :group)
ON DUPLICATE KEY UPDATE name=values(name), group=values(group)"
);
$query->execute([
"id"=>$id,
"name"=>$name,
"group"=>$group
]);
}
答案 0 :(得分:3)
也许尝试将Result : {"error_code":"54001","error_msg":"Invalid Sign”}
放在你的foreach之外?
我不知道是否需要在每个周期中打开连接。这也可能是耗时的。
答案 1 :(得分:2)
您可以使用单个查询:
INSERT INTO users (id, name)
VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Cecil')
ON DUPLICATE KEY UPDATE name = VALUES(name);
简而言之:您插入新行,但如果已经存在(密钥重复),则会更新它。您可以在循环中构建插入值,因此最终只能使用单个查询而不是4000 +。
了解更多here。
答案 2 :(得分:1)
首先从foreach lopp中获取数据库中的所有用户id并将其缓存在某个变量中。应该会更好。