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