count(1),count(*),count(主鍵),count(字段)
對於 count(主鍵 id) 來說
innodb 引擎會遍歷整張表,把每一行的 id 值都取出來,返回給 server 層。server 層拿到 id 後,判斷是不可能為空的,就按行累加。
對於 count(1) 來說
innodb 引擎遍歷整張表,但不取值。server 層對於返回的每一行,放乙個數字「1」進去,判斷是不可能為空的,按行累加。
對於 count(字段) 來說:
1、如果這個「字段」是定義為 not null 的話,一行行地從記錄裡面讀出這個字段,判斷不能為 null,按行累加;
2、如果這個「字段」定義允許為 null,那麼執行的時候,還要把值取出來再判斷一下,不是 null 才累加。
也就是前面的第一條原則,server 層要什麼字段,innodb 就返回什麼字段。
count(*) 是例外
並不會把全部字段取出來,而是專門做了優化,不取值。count(*) 肯定不是 null,按行累加。
所以結論是:按照效率排序的話,count(字段)),所以我建議你,盡量使用 count()。
mysql 七 count 統計方式的不同
count 的實現方式 在不同的mysql引擎中,count 實現的方式不同。myisam引擎中把乙個表的總行數直接存在了磁碟上,執行count 的時候直接返回這個數,效率很高 不支援事務 而innodb引擎,執行count 的時候,需要把資料一行一行的從引擎讀出來,然後累計計數 因為mvcc的實現...
count 列名 與count 說明
1 count 會統計值為null的行,而count 列名 不會統計此列為null值的行 2 不要使用count 列名 或者count 常量 來代替count count 就是sql92定義的標準統計行數的語法,跟資料庫無關,跟null和非null無關 3 count 列 對應的列欄位如果建了索引,...
Android幾種不同手勢記錄
1.輕點輕放 手勢呼叫順序為 ondown onsingletapup 2.按下一秒左右放開 手勢呼叫順序為 ondown onshowpress onsingletapup 3.長按後鬆開 順序為 ondown onshowpress onlongpress 4.按下 一秒 後緩慢滑動 順序 on...