好吧,我的问题是,我有一个脚本,加载在每个页面上,它检查一个登录用户是否被禁止,通过检查一个名为“禁止”的列,可以输出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!
}
2条答案
按热度按时间x759pob21#
选择计数()与选择不同。
fetchcolumn()和rowcount()都由mysql执行
(1) 如果mysql中的数据太多,会影响性能
(2) 另一方面,你可以认为它们是一样的,你可以同时使用它们
如果您选择第一种方法,mysql将返回您所有的数据结果,它将使用数据转换、net、time等
所以你应该考虑你的真实环境来决定使用哪一个。
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 secondsrowcount()
是赢家。