php - 性能,检查值是否存在数组或查询

标签 php mysql performance

我需要检查数据库中是否存在某个值

我有一个表,其中每个用户都有一个唯一的代码。例如:5 点 27 分。

这些价​​值和用户的积累速度非常快。所以很快我可能就会有超过 2000 个独特的代码。检查值是否唯一的最佳、最快和最有效的方法是什么?

foreach ($users as $user) {

    $is_unique = FALSE;

    while ($is_unique == FALSE) {
        $code = unique_code();
        $query = "SELECT * FROM unique_code_table WHERE code='$code';";
        $res = $mysqli->query($query);
        if ($res->num_rows > 0 {
        } else {
            $is_unique = TRUE;
        }
    }
}

或者

$query = "SELECT code FROM unique_code_table;";
$res = mysqli->query($query);

$codes = array();
$i = 0;
while ($row = $res->fetch_object()) {
    $codes[$i] = $row->code;
    $i++;
}

$code = unique_code();
while (in_array($code, $codes) {
    $code = unique_code();
}

(此代码可能不是 100% 准确,我编写此代码只是为了解释问题的目的。)

最佳答案

我想说,对数据库进行一次查询比可能进行 2000 多次查询要好得多。第二个脚本将明显更快。

在第一个代码中,LIMIT 1 会创造奇迹,但与第二个查询相比,就基准而言,它会显得苍白无力。

将以下内容放在脚本底部以进行微调和基准测试: PHP 5.4 +

$sParseTime = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];
echo $sParseTime;

关于php - 性能,检查值是否存在数组或查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29067138/

相关文章:

php - sql注入(inject)是否可以通过 file_get_contents ("php://input");或者只用 get 和 post 就可以了?

PHP PDF生成问题

php导入谷歌联系人csv文件

mysql - 如何使用where子句从phpmyadmin导出mysql数据库?

php - 在 Sphinx 中使用过滤器执行空查询

c++ - 在 C++ 中传递固定大小的数组?

java - JnetPcap:从脱机文件读取速度非常慢

php - MySQL - 保留记录一段时间,如果用户未能更改状态则释放它

mysql - 帮助配置 JBoss MySQL 数据源

python - 为什么提高精度会使这个程序更快?