count(*)這么慢酬凳,該怎么辦?

count(*) 的實現(xiàn)方式:

1.?MyISAM 引擎把一個表的總行數(shù)存在了磁盤上遭庶,因此執(zhí)行 count(*) 的時候會直接返回

這個數(shù)宁仔,效率很高;

2.?而 InnoDB 引擎就麻煩了峦睡,它執(zhí)行 count(*) 的時候翎苫,需要把數(shù)據(jù)一行一行地從引擎里面

讀出來,然后累積計數(shù)榨了。

這里需要注意的是煎谍,我們在這篇文章里討論的是沒有過濾條件的 count(*),如果加了

where 條件的話龙屉,MyISAM 表也是不能返回得這么快的呐粘。

為什么 InnoDB 不跟 MyISAM 一樣,也把數(shù)字存起來呢叔扼?

這是因為即使是在同一個時刻的多個查詢事哭,由于多版本并發(fā)控制(MVCC)的原因,

InnoDB 表“應該返回多少行”也是不確定的瓜富。

在保證邏輯正確的前提下鳍咱,盡量減少掃描的數(shù)據(jù)量,是數(shù)據(jù)庫系統(tǒng)設(shè)計的通用法則

之一与柑。

解決計數(shù)的方法:

1.?用緩存系統(tǒng)保存計數(shù)

存在的問題:1)計數(shù)丟失谤辜;2)計數(shù)不準確

2.?在數(shù)據(jù)庫保存計數(shù)? ----> 常用的手段

不同的 count 用法

1).?對于 count(主鍵 id) 來說

InnoDB 引擎會遍歷整張表蓄坏,把每一行的 id 值都取出來,返回給 server 層丑念。server 層拿到 id 后涡戳,判斷是不可能為空的,就按行累加脯倚。

2).?對于 count(1) 來說

InnoDB 引擎遍歷整張表渔彰,但不取值。server 層對于返回的每一行推正,放一個數(shù)字“1”進去恍涂,判斷是不可能為空的,按行累加植榕。

count(1) 執(zhí)行得要比 count(主鍵 id) 快再沧。因為從引擎返回 id 會涉及到解析數(shù)據(jù)行,以及拷貝字段值的操作尊残。

3).?對于 count(字段) 來說:

????1. 如果這個“字段”是定義為 not null 的話炒瘸,一行行地從記錄里面讀出這個字段,判斷不

????????能為 null寝衫,按行累加顷扩;

2. 如果這個“字段”定義允許為 null,那么執(zhí)行的時候竞端,判斷到有可能是 null屎即,還要把值

? ? ? ?取出來再判斷一下,不是 null 才累加事富。

4).?count(*)

? ??????并不會把全部字段取出來技俐,而是專門做了優(yōu)化,不取值统台。count(*) 肯定不是 null雕擂,按行累加。

所以結(jié)論是:按照效率排序的話

count(字段)<count(主鍵 id)<count(1))≈count(*)贱勃,盡量使用 count(*)井赌。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贵扰,隨后出現(xiàn)的幾起案子仇穗,更是在濱河造成了極大的恐慌,老刑警劉巖戚绕,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纹坐,死亡現(xiàn)場離奇詭異,居然都是意外死亡舞丛,警方通過查閱死者的電腦和手機耘子,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門果漾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谷誓,你說我怎么就攤上這事绒障。” “怎么了捍歪?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵户辱,是天一觀的道長。 經(jīng)常有香客問我费封,道長焕妙,這世上最難降的妖魔是什么蒋伦? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任弓摘,我火速辦了婚禮,結(jié)果婚禮上痕届,老公的妹妹穿的比我還像新娘韧献。我一直安慰自己,他們只是感情好研叫,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布锤窑。 她就那樣靜靜地躺著,像睡著了一般嚷炉。 火紅的嫁衣襯著肌膚如雪渊啰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天申屹,我揣著相機與錄音绘证,去河邊找鬼。 笑死哗讥,一個胖子當著我的面吹牛嚷那,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杆煞,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼魏宽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了决乎?” 一聲冷哼從身側(cè)響起队询,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎构诚,沒想到半個月后蚌斩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡唤反,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年凳寺,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸭津。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡肠缨,死狀恐怖逆趋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晒奕,我是刑警寧澤闻书,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站脑慧,受9級特大地震影響魄眉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闷袒,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一坑律、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧囊骤,春花似錦晃择、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至滑蚯,卻和暖如春浪蹂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背告材。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工坤次, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人创葡。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓浙踢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親灿渴。 傳聞我的和親對象是個殘疾皇子洛波,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348