php&pdo:哪个更快?正在获取计数(*)或行计数()?

bihw5rsg  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(307)

好吧,我的问题是,我有一个脚本,加载在每个页面上,它检查一个登录用户是否被禁止,通过检查一个名为“禁止”的列,可以输出0(未禁止)或1(禁止)。我试着寻找这个,但没有找到一个绝对的答案,其中执行更好:
获取计数(*)查询:

$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!
}
x759pob2

x759pob21#

选择计数()与选择不同。
fetchcolumn()和rowcount()都由mysql执行
(1) 如果mysql中的数据太多,会影响性能
(2) 另一方面,你可以认为它们是一样的,你可以同时使用它们
如果您选择第一种方法,mysql将返回您所有的数据结果,它将使用数据转换、net、time等
所以你应该考虑你的真实环境来决定使用哪一个。

gfttwv5a

gfttwv5a2#

我执行了一个基准测试,其中有20万个随机生成的条目,其中有三列id、name和banked。随机抽取3467名用户进行禁赛。我在aws微示例上使用以下配置:
php 7.0.30-0版本
ubuntu 0.16.04.1版本
MySQL5.7.22-0版本
基准结果: COUNT(*) execution took 0.00022506713867188 seconds rowcount() execution took 0.00011420249938965 seconds rowcount() 是赢家。

相关问题