count(*)
和count(column_name)
,什么是在MySQL中差别。count(*)和count(column_name),diff是什么?
回答
COUNT(*)
计数结果集中的所有行(或组,如果使用GROUP BY)是最好COUNT (ColumnName)
。COUNT(column_name)
只计算那些行,其中column_name
是NOT NULL。即使没有NULL值,在某些情况下这可能会变慢,因为必须检查该值(除非该列不可为空)。COUNT(1)
相同COUNT(*)
因为1不能为NULL。
要看到不同的结果,你可以试试这个小实验:
CREATE TABLE table1 (x INT NULL);
INSERT INTO table1 (x) VALUES (1), (2), (NULL);
SELECT
COUNT(*) AS a,
COUNT(x) AS b,
COUNT(1) AS c
FROM table1;
结果:
a b c 3 2 3
COUNT(*)不计算结果集中的所有行(或者如果使用GROUP BY,则为组)不计算那些行所有的column_name都不是NULL – zloctb 2014-04-24 11:35:48
COUNT (*)
,COUNT (ColumnName)
,COUNT (1)
之间没有性能差异。
现在,如果您有COUNT (ColumnName)
,那么数据库必须检查该列是否具有NULL
值,并且NULL
从集合中消除。所以COuNT (*)
或COUNT (1)
,除非你想COUNT (DISTINCT ColumnName)
根据列定义 - 即如果你的列允许空 - 你可能会得到不同的结果(在Mark已经告诉的情况下,在某些情况下,它可能会减少计数(列))。
在大多数情况下,几乎没有区别,COUNT(*)
或COUNT(1)
一般是优选的。但是,有一个重要的情况,您需要必须使用COUNT(columnname)
:外部连接。
如果您正在执行从父表到子表的外连接,并且您希望在子表中没有相关项的行中得到零计数,则必须使用COUNT(column in child table)
。当没有比赛,该列就会NULL
,你会得到所需的零计数(实际上,你会得到NULL
,但你可以将其转换成0
与IFNULL()
或COALESCE()
)。如果您使用COUNT(*)
,它会计算父表中的行数,所以您会得到1
的计数。
SELECT c.name, COALESCE(COUNT(o.id), 0) AS order_count
FROM customers AS c
LEFT JOIN orders AS o ON o.customer_id = c.id
- 1. mysql where count(column_name)= 1?
- 2. COUNT(Distinct column_name)的用法
- 3. mySQL/SQL中count(0),count(1)..和count(*)有什么区别?
- 4. COUNT(1) - COUNT(column_name)只返回空值的数量吗?
- 5. vim中的“count”是什么?
- 6. 什么是COUNT(*)%2 = 1
- 7. 为什么mysql count(*)比count更好(id)
- 8. 为什么SELECT count(PK)和SELECT count(*)这么慢?
- 9. 这是什么声明:(count == null)? 1:count + 1
- 10. COUNT(*)和COUNT(table.ColumnName)之间有什么区别?
- 11. 什么时候使用Sql Server 2008中的Count(*)和Count(1)
- 12. sql中count(*)和count(1)有什么区别?
- 13. 在Perl中,“if defined $ count”和“if $ count”之间有什么区别?
- 14. C#中可观察集合中Count和Count()之间的区别是什么?
- 15. 区别:d [count]和d [count]
- 16. 为什么hashtable count = 1而不是= 5?
- 17. python中内置的.count是什么?
- 18. thread count in process(wmic)是什么意思
- 19. 在mongodb中,db.oplog.rs.stats()。count是什么意思?
- 20. Laravel:take(1) - > count();这是什么意思?
- 21. fread()中的“short item count”是什么?
- 22. COUNT(*)和
- 23. .count()为什么打破Meteor?
- 24. 为什么它用count ++可以正常工作;但不能用count = count ++;
- 25. SQL COUNT COUNT
- 26. Select count with count
- 27. Where()。Count()vs. Count()
- 28. 名称为'count'的Count列返回多行。为什么?
- 29. select count does not count
- 30. Mysql select count with count
表现明智,没有区别,但是,当您指定列名称时,您只会获得该字段不为空的行数。另外,count(columnName)在我看来只是“感觉”更好。 – Jay 2010-05-20 19:00:33
@Jay:有一个性能差异。请参阅:http://www.mysqlperformanceblog.com/2007/04/10/count-vs-countcol/ – 2010-05-20 19:54:44