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值