在SQL中,count(*)和count('x')之间有什么区别?

And*_*rew 12 sql

我有以下代码:

SELECT <column>, count(*)
FROM <table>
GROUP BY <column> HAVING COUNT(*) > 1;
Run Code Online (Sandbox Code Playgroud)

如果我用COUNT('x')替换COUNT(*),结果或性能是否有任何差异?

(这个问题与之前的问题有关)

Mat*_*ish 14

要说SELECT COUNT(*) vs COUNT(1)你的DBMS返回"列"的结果是纯粹的铺位.这可能是很久很久以前的情况,但任何自尊的查询优化器都会选择一些快速的方法来计算表中的行 - 两者之间没有性能差异SELECT COUNT(*), COUNT(1), COUNT('this is a silly conversation')

此外,SELECT(1) vs SELECT(*)INDEX的使用不会有任何差异 - 大多数DBMS实际上都会进行优化SELECT( n ) into SELECT(*).请参阅ASK TOM:Oracle已经在SELECT(n) into SELECT(*)十年的大部分时间内进行了优化,如果不是更长时间:http://asktom.oracle.com/pls/asktom/f?p = 100:11:0 ::::P11_QUESTION_ID: 1156151916789

问题在于count(col)到count()的转换 ** 03/23 / 00 05:46 pm***一种解决方法是将事件10122设置为关闭计数(col) - > count()优化.另一个解决方法是将count(col)更改为count(),当col具有NOT NULL约束时,它意味着相同.错误号是1215372.

有一点需要注意 - 如果你使用COUNT(col)(不要!)并且col被标记为NULL,那么它实际上必须计算表中出现的次数(通过索引扫描,直方图等,如果它们存在,或者全表扫描,否则).

底线:如果您想要的是表中的行数,请使用COUNT(*)