關於count(1),count(*),和count(列名)的區別

count(1)和count(*)並沒有區別。

count(列)和count(*)其實一樣快,如果索引列是非空的,count(*)可用到索引,此時一樣快。

總結:但是真的結論是這樣的麼。其實不然。其實在數據庫中count(*)和count(列)根本就是不等價的,count(*)是針對於全表的,而count(列)是針對於某一列的,如果此列值爲空的話,count(列)是不會統計這一行的。所以兩者根本沒有可比性,性能比較首先要考慮寫法等價,這兩個語句根本就不等價。也就失去了去比較的意義!!!

若查詢表只有一個字段,則COUNT(*)最快;

若查詢表無主鍵,則COUNT(1)比COUNT(*)快;

若查詢表有主鍵,則COUNT(主鍵)比COUNT(*)快,count(主鍵列)》count(1)》count(*);

COUNT(*)返回總行數,包含NULL值; COUNT(列名)返回總行數,不含NULL值; DISTINCT COUNT(*)返回總行數,去除重複且不含NULL值
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章