通常狀況下,Select Count (*)和Select Count(1)兩着返回結果是同樣的數據庫
假如表沒有主鍵(Primary key), 那麼count(1)比count(*)快,函數
若是有主鍵的話,那主鍵做爲count的條件時候count(主鍵)最快性能
若是你的表只有一個字段的話那count(*)就是最快的教程
count(*) 跟 count(1) 的結果同樣,都包括對NULL的統計,而count(column) 是不包括NULL的統計索引
一、select 1 與 select *的區別
selelct 常量 from ... 對應全部行,返回的永遠只有一個值,即常量 。因此正常只會用來判斷是否有仍是沒有(好比exists子句)。而select * from ... 是返回全部行的全部列。
性能上的差別,關鍵看你的from和where子句。好比說若是你的where條件中能夠經過索引,那顯然 select 1 from ... 的性能比 select * from ... 好。
二、select sum(1)的使用
select count(*)返回全部知足條件的記錄數,此時同select sum(1)
可是sum()能夠傳任意數字,負數、浮點數均可以,返回的值是傳入值n*知足條件記錄數mtest
B效率
select count(1) from test
-- 在沒有彙集的狀況下,這種查詢的效率可能會高一點
select count(*) from test
-- 有索引走索引,沒索引全表掃描,能夠利用表的統計信息
select count(a) from test
-- 掃描a列的數據記錄數,若是a上沒有索引,則效率最差,而且若是a列包含null,則不會計數select
Cim
count(1) 是絕對快,它只統計記錄條數,對條件下的表掃描一遍而已 count(*) 是可能快,有主鍵的時候只掃主鍵,主鍵數等於記錄數 count(主鍵)=count(1)
COUNT(*)與COUNT(列名)的區別統計
之前一直沒有留意到COUNT(*)與COUNT(列名)的區別,昨天晚上無心中看到數據庫系統工程師教程裏面的一句話."若是null參與彙集運算,則除count(*)以外其它彙集函數都忽略null." 這句話的意思說若是字段是有空值的話,你用SUM去計算,獲得的結果有可能不許確. 看一個實例. 表A ID EE 1 e 2 null select count(*) from A --結果是2 select count(EE) from A ---結果是1