select count(*)和select count(1)的區別

通常狀況下,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

相關文章
相關標籤/搜索