php - 为什么这个 MySQL 查询会减慢我的代码

标签 php mysql query-optimization

目前我有一个在 PHP 中运行的 MySQL 查询,在查看结果时我更新了原始表,但是一个包含 500 行的简单表需要 30 秒才能完成:

$sqlquery = mysql_query('SELECT id, special_data FROM stats_visits WHERE processed = 0');
while($row = mysql_fetch_assoc($sqlquery)){ 
    $stat_id = $row['id'];
    // Make use of special_data field for some operations
    mysql_query('UPDATE stats_visits SET processed = 1 WHERE id = ' . $stat_id);
}

是因为我正在更新我选择的表格吗?我已经通过执行以下操作解决了这个问题,但是因为该表将来可能有数千条记录,所以我不确定 IN 的表现如何:

$statids = array();

$sqlquery = mysql_query('SELECT id, special_data FROM stats_visits WHERE processed = 0');
while($row = mysql_fetch_assoc($sqlquery)){ 
    $statids[] = $row['id'];
    // Make use of special_data field for some operations
}

mysql_query('UPDATE stats_visits SET processed = 1 WHERE id IN(' . implode(',', $statids) . ')');

最佳答案

如果您只想将所有记录更新为 processed = 1 为什么不使用单个查询来解决它?:

UPDATE `stats_visits` SET `processed` = 1 WHERE `processed` = 0;

关于php - 为什么这个 MySQL 查询会减慢我的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10142523/

相关文章:

php 对象关联数组

php - 在 Woocommerce 3+ 中使用订单项以编程方式创建订单

mysql - MySQL有没有 "this"数据库的概念?

php - 使用 AsyncHttpClient 将参数 POST 到 php

sql - 游标和存储过程优化

php - stdClass 到数组?

PHP异步任务

mysql - 两列,相同的数据,不同的Where子句

MySQL View 花费太多时间来选择数据

MySQL JOIN 查询花费太长时间才能完成