【发布时间】:2018-05-21 14:57:22
【问题描述】:
好的,我的问题是我有一个在每个页面上加载的脚本,它通过检查名为“banned”的列来检查登录用户是否被禁止,该列可以输出 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!
}
【问题讨论】:
-
测试一下!回显开始时间和停止时间之间的时间差。多次这样做。
-
可以添加
limit 1以限制第二个查找更多行。 -
在第二种情况下也可以
SELECT 1...但我强烈怀疑我们谈论的是性能上如此微小的差异,除非你有点像谷歌/Facebook,否则不值得为此烦恼大小。 -
问题取决于使用的表引擎、使用的索引和表大小。但要计算
SELECT COUNT(*) ...最有意义,并且如果使用索引会表现最好