我們在運算元據庫時,統計數量函式count被經常使用到,今天我們就來細品select count函式
認識count
1、count(expr),返回select語句檢索的行中expr的值不為null的數量。結果是乙個bigint值。
2、如果查詢結果沒有命中任何記錄,則返回0。
3、count(*)的統計結果中,會包含值為null的行數。
count(列名)、 count(常量)、 count(*)的區別
1、常量是個固定值,肯定不為null,*時整行查詢,也不為null,列名的查詢結果可能為空。所有,count(常量)和count(*)是查詢符合條件的資料庫表的行數,count(列名)表示的是查詢符合條件的列值不為null的行數。
2、count(*)會統計值為null的行,而count(列名)不會統計列為null值的行。
3、不可以使用count(列名)或count(常量)來代替count(*),count(*)時sql92定義的標準統計行數的語法,跟資料庫、null和非null無關。
count(字段)
他的查詢進行的是全表掃瞄,然後判斷指定欄位的值是不是null,不是則累加。
相比count(*),count(字段)多了個步驟就是判斷所查詢的字段是否為null,所以他的效能要比count(*)慢。
count(*)和count(1)
資料庫對兩者的優化是完全應用的,所以不存在誰快誰慢。但是建議使用count(*),因為這個是sql92定義的標準統計行數語法。
count(*)的優化
myisam:他把表的總行數單獨記錄出來,如果從一張表中使用count(*)進行查詢的時候,當沒有where條件時可以直接返回這個記錄下來的數值就可以了。myisam之所以可以把表中的總行數記錄下來,是因為他的資料庫是表級鎖,不會有併發的資料庫修改,所以查詢到的行數是準確的。
innodb:選擇最小的非主鍵索引來掃表。所以,我們建表的時候,除了主鍵索引以外,還要建立乙個非主鍵索引。
over!
你品,你細品!
致橡樹 我如果愛你 絕不像攀援的凌霄花,借你的高枝炫耀自己 我如果愛你 絕不學痴情的鳥兒,為綠蔭重複單調的歌曲 也不止像泉源,常年送來清涼的慰藉 也不止像險峰,增加你的高度,襯托你的威儀。甚至日光,甚至春雨。不,這些都還不夠!我必須是你近旁的一株木棉,作為樹的形象和你站在一起。根,緊握在地下 葉,相...
select COUNT 語句深入解釋
select count 只統計不是null的列數,所以count 列名 count 常量 count 的區別就是 count 列名 中的列可能是null,於是不被統計入內 其餘兩個倒是統計所有符合條件的行數,且是標準的統計行數的方法,mysql已經做了一些優化,所以推薦 區分為myisam和inn...
細品奶茶文化
乙個合格的江湖奶茶人,要熟記以下規矩 1 點奶茶千萬不要說什麼八分糖,就跟吃牛排說 我要八分熟 一樣,會顯得你不專業不高階。甜食愛好者就點全糖,普通人點半糖,達人點無糖。就是這樣。當然,全糖半糖無糖,其實並沒有本質差別。2 不要舔蓋不要舔蓋不要舔蓋。阿花和我說,再窮也不能舔蓋。奶蓋就是應該直接喝,舔...