【问题标题】:SELECT COUNT(*) and SELECT COUNT(Primary Key) for PDO SELECTPDO SELECT 的 SELECT COUNT(*) 和 SELECT COUNT(Primary Key)
【发布时间】:2014-01-24 08:58:22
【问题描述】:

我有一个登录脚本,它采用用户的电子邮件/密码组合,在其上运行选择查询,如果返回的结果数超过 1,则将用户登录。

脚本示例:

require("dbconnection.inc");
$email=$_POST['email'];
$pw=$_POST['pw'];
$login=$connection->prepare("SELECT `Password` FROM `Users` WHERE `Email`=:email");
$login->bindValue(":emailuser",$loginemail);
$login->execute();
$verifyemail=$loginuser->rowCount();
if($verifyemail > 0)
{
    //Login user
}

但是,我在 PHP 手册中看到 rowCount() 不应该与 PDO 一起使用,因为并非所有数据库都支持它,并且

$count = $pdo->query('select count(*) FROM blah WHERE blah')->fetchColumn(); 
echo $count;

应该改为使用。

但是,我想知道我是否可以简单地使用count(PrimaryKey) 代替count(*)。是否可以使用count(PrimaryKey) 代替count(*) 以及是否有任何缺点?

P.S 我目前正在使用 MYSQL,rowCount 工作正常,我不确定是否应该将当前代码更改为 COUNT(*)

【问题讨论】:

  • 是的,如果您愿意,可以使用COUNT(id)。就我个人而言,我总是只计算 id(或其他字段)而不是使用 * 选项。
  • 通常认为使用count(PrimaryKey) 甚至count(1) 更有效...尽管我相信一些数据库现在已经优化count(*) 以匹配其他两个变体的效率

标签: php mysql pdo


【解决方案1】:

来自sql_func_count

SQL COUNT(column_name) 语法

COUNT(column_name)函数返回指定列的值个数(NULL值不计入):

SELECT COUNT(column_name) FROM table_name;

SQL COUNT(*) 语法

COUNT(*) 函数返回表中的记录数:

SELECT COUNT(*) FROM table_name;

SQL COUNT(DISTINCT column_name) 语法

COUNT(DISTINCT column_name) 函数返回指定列的不同值的个数:

SELECT COUNT(DISTINCT column_name) FROM table_name;

注意:COUNT(DISTINCT) 适用于 ORACLE 和 Microsoft SQL Server,但不适用于 Microsoft Access。

MySQL:

如果是 mysql,请阅读 MySQL 性能博客 中的以下文章 COUNT(*) vs COUNT(col)

【讨论】:

    猜你喜欢
    • 2014-01-18
    • 1970-01-01
    • 2016-12-24
    • 2016-07-27
    • 2014-01-19
    • 2015-07-31
    • 2015-01-15
    • 1970-01-01
    • 2017-12-19
    相关资源
    最近更新 更多