PHP& PDO:哪个更快?获取COUNT(*)或rowCount()?

时间:2018-05-21 14:57:23

标签: php mysql mysqli pdo

好的,我的问题是我有一个脚本加载到每个页面上,它通过检查名为"禁止"的列来检查是否禁止登录用户。可输出0(未禁止)或1(禁止)。我已经尝试过搜索这个,但没有找到一个表现更好的绝对答案:

获取COUNT(*)查询:

$query = $PDO->prepare("SELECT COUNT(*) FROM users WHERE id = :ID AND banned = 1");
$query->execute(array(":ID" => $USER_ID));
if ($query->fetchColumn() > 0) {
    // USER IS BANNED! SHOW ERROR MESSAGE!
}

使用rowCount()而不是抓取:

$query = $PDO->prepare("SELECT banned FROM users WHERE id = :ID AND banned = 1");
$query->execute(array(":ID" => $USER_ID));
if ($query->rowCount() > 0) {
    // USER IS BANNED! SHOW ERROR MESSAGE!
}

2 个答案:

答案 0 :(得分:1)

  1. select COUNT(*)与select *。
  2. 不同
  3. fetchColumn()和rowCount()都被mysql所取代

    (1)如果mysql中的数据太多,则会影响执行

    (2)另一个,你可以认为它们是相同的,你可以同时使用它们

  4. 如果选择第一种方法,mysql会返回所有数据结果, 它将使用数据转换,网络,时间等

  5. 所以你应该考虑你真正的环境来决定使用哪一个。

答案 1 :(得分:0)

我用200k随机生成的条目执行了一个基准测试,其中包含三列id,name和banned。随机选择了3467名用户被禁止。我在AWS微实例上使用以下配置:

PHP 7.0.30-0

Ubuntu 0.16.04.1

MySQL 5.7.22-0

基准测试结果:

COUNT(*) execution took 0.00022506713867188 seconds

rowcount() execution took 0.00011420249938965 seconds

rowcount()是赢家。