php - 如何使用 MySQL 多查询优化查询?

标签 php mysql sql

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

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);
}

最佳答案

如果您已经在使用 mysqli 或 PDO,您应该为您的查询使用准备好的语句,因为它们是受支持的。这也会稍微提高性能,因为不需要将整个查询再次发送到数据库服务器。然而,最大的优势是准备好的语句提供了更高的安全性。

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

编辑: 如果您想在一个查询中完成所有操作,正如您似乎建议的那样,您也可以使用 ON DUPLICATE KEY UPDATE如对 this question 的回答所述:

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 中绑定(bind)参数应该做的事情的近似值:

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

关于php - 如何使用 MySQL 多查询优化查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6990216/

相关文章:

sql - SQL Server 中的 DECODE() 函数

php - 获取字符串格式的 curl 响应

php - 来自链接 php 的电子邮件验证

PHP 和 MySQL - 唯一的列集

php - 使用php和phpexcel将两个表中的mysql数据导出到excel

mysql - 对于包含超过 1 件商品的订单,最多只能选择 2 行

php - mysql php从2个表中减去2个字段改进查询

mysql - MySQL什么时候更新索引

mysql - 如何为每个对话选择最后一条消息?

sql - 如何根据某些条件在配置单元中获取收集集