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

时间:2015-03-15 22:49:58

标签: php mysql performance

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

我有一个表,每个用户都有一个唯一的代码。例如:5h27f。

这些价​​值观和用户加起来很快。所以我很快就会拥有+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;
        }
    }
}

OR

$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%准确,我这样写只是为了解释问题的目的。)

1 个答案:

答案 0 :(得分:2)

我说,一次查询数据库与可能的2000+相比,明显更好。第二个脚本会快得多。

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

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

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