首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MySQL多查询优化查询?

问如何使用MySQL多查询优化查询?
EN

Stack Overflow用户
提问于 2011-08-09 08:35:04
回答 1查看 1.4K关注 0票数 0

我需要优化脚本以获得高性能,因此问题是如何将MySQL多查询添加到此代码中?

代码语言:javascript
复制
foreach($multiContent as $htmlContent) {
    $email = urldecode($email['1']);
    $user = $user['1'];

    //store in db
    $db->query("UPDATE eba_users 
                   SET mail = '$email' 
                 WHERE username = '$user'");
    //echo "email is $email and user is $user\n";
  }

  //close if ($array_counter % 200
  unset($array_counter);
  unset($data);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-09 08:40:10

如果您已经在使用mysqli或PDO,那么应该对您的查询使用预准备语句,因为它们是受支持的。这也会略微提高性能,因为整个查询不需要再次发送到DB服务器。但是,最大的优点是预准备语句提供了更高的安全性。

除此之外,如果您还没有在username上添加索引,请尝试添加索引以加快查询速度。

编辑:如果您希望在一个查询中完成所有这些操作,就像您所建议的那样,您还可以使用前面提到的this question的答案ON DUPLICATE KEY UPDATE

代码语言:javascript
复制
INSERT INTO eba_users (`username`, `mail`) 
VALUES 
    ('username1','$email1'),
    ('username2','$email2'),
    ('username3','$email3'),
    ('username4','$email4'),
    ....
    ('usernameN','$emailN'),
ON DUPLICATE KEY UPDATE `mail`=VALUES(mail);

但是,这可能没有使用带有常规UPDATE的预准备语句那么快。

Edit2:按照要求,下面可能是绑定mysqli中的参数时应该执行的操作的近似值:

代码语言:javascript
复制
if ($stmt = $mysqli->prepare("UPDATE eba_users SET mail= ? WHERE username= ?")) {

    /* loop through array of users */
    foreach ($array as $username => $newemail) {

        /* bind parameters for markers */
        $stmt->bind_param("ss", $newemail, $username);

        /* execute query */
        $stmt->execute();
    }
}

当然,这不会在失败的情况下提供任何类型的错误消息。为此,您可以查看mysqli::error

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6990216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档