「日志」Navicat統(tǒng)計的行數(shù)竟然和表實際行數(shù)不一致寺晌?!

背景

近期為了保障線上數(shù)據(jù)庫的穩(wěn)定性澡刹,我決定針對一些大表的歷史數(shù)據(jù)有計劃地進行備份遷移呻征,但是呢,發(fā)現(xiàn)一個奇特的現(xiàn)象罢浇,Navicat統(tǒng)計行數(shù)和表自身count統(tǒng)計數(shù)竟然不一致B礁场?0.0

Navicat

Navicat作為數(shù)據(jù)庫管理工具嚷闭,在業(yè)界廣受歡迎攒岛,先甭管你電腦上現(xiàn)在正在運行的Navicat是正版還是盜版(你不說我也知道),不可否認的是胞锰,在我從事17年從事后端開發(fā)以來灾锯,嘗試了很多同類工具,Navicat在功能上完全碾壓其他數(shù)據(jù)庫管理工具嗅榕,尤其是細節(jié)方面顺饮,在這里不一一列舉了吵聪,總之一個字,就是很好用(不接受反駁兼雄,除非你說出來一個讓我心服口服的工具)吟逝。

整個經(jīng)過

這次大表遷移備份,我的整體思路是:首先用Navicat對庫內(nèi)所有的表按照行數(shù)降序排序君旦,然后選取Top10進行遷移備份澎办。但是一如既往細心的我發(fā)現(xiàn),它界面的統(tǒng)計行數(shù)竟然和我自己count這張表行數(shù)不一致金砍?局蚀!難道要顛覆我對Navicat的認可嘛。


select count(1) from big_table_name;

為什么呢恕稠?

這讓我很是詫異琅绅,一度以為自己出現(xiàn)了幻覺,再三確認自己沒有帶VR眼鏡后鹅巍,我踏上了尋找答案的征程千扶。我開始思考,Mysql作為一個數(shù)據(jù)庫骆捧,自身肯定就有各個表的統(tǒng)計澎羞,而Navicat只是作為一個可視化界面,讓數(shù)據(jù)肉眼可見敛苇。

Navicat:這鍋我可不背妆绞。

為了證實我的猜想,我查閱了官方文檔及其他相關(guān)資料枫攀,果然括饶,MySQL 在 information_schema.TABLES表中息存放了所有表的信息。

select * from information_schema.TABLES;

查看了這張表以后来涨,發(fā)現(xiàn)表里統(tǒng)計記錄TABLE_ROWS字段的確實與事實count不符……

這又是為什么呢图焰?

我又陷入了沉思,帶著疑惑蹦掐,繼續(xù)翻閱著文檔技羔,突然,看到MySQL官方文檔對TABLE_ROWS的解釋:

The number of rows. Some storage engines, such as MyISAM, store the exact count. For other storage engines, such as InnoDB, this value is an approximation, and may vary from the actual value by as much as 40% to 50%. In such cases, use SELECT COUNT(*) to obtain an accurate count.

看了這段話我頓悟啦卧抗,你是不是也明白怎么回事啦藤滥。什么?你沒看太明白颗味?好吧,沒關(guān)系牺弹,你可能需要通過翻譯軟件的直譯+理解浦马,才懂得其中真正的含義时呀。原來,TABLE_ROWS這個字段不同存儲引擎的計數(shù)規(guī)則不一致晶默,比如MyISAM引擎這表存儲TABLE_ROWS存儲的就是精確的行數(shù)谨娜,而對于其他的存儲引擎,比如 InnoDB磺陡,這個值只是一個近似值趴梢,與實際值相差40%-50%左右。所以币他,在這種情況下坞靶,我們想要得到一個準(zhǔn)確的計數(shù),只能使用 SELECT COUNT(*) 來獲得蝴悉。

那又如何修正呢彰阴?

雖然疑惑得到了解答。但拍冠,和我一樣有強迫癥的朋友肯定會問尿这,如何修正這個值呢?真是知道越多庆杜,未知越多射众,網(wǎng)上說可以通過

Analyze table big_table_name

得以更正這個數(shù)據(jù),但是我動手執(zhí)行之后發(fā)現(xiàn)晃财,并不能更正數(shù)據(jù)叨橱,且該操作不僅耗時還會鎖表,并不推薦使用……說到這拓劝,我的強迫癥竟然不治自愈了雏逾。
朋友,你有更好的辦法嘛郑临?歡迎留言栖博。

本文可轉(zhuǎn)載,但需聲明原文出處厢洞。 程序員小明仇让,一個很少加班的程序員。歡迎關(guān)注微信公眾號“程序員小明”躺翻,獲取更多優(yōu)質(zhì)文章丧叽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市公你,隨后出現(xiàn)的幾起案子踊淳,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迂尝,死亡現(xiàn)場離奇詭異脱茉,居然都是意外死亡,警方通過查閱死者的電腦和手機垄开,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門琴许,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溉躲,你說我怎么就攤上這事榜田。” “怎么了锻梳?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵箭券,是天一觀的道長。 經(jīng)常有香客問我唱蒸,道長邦鲫,這世上最難降的妖魔是什么抄罕? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任酬核,我火速辦了婚禮,結(jié)果婚禮上惶楼,老公的妹妹穿的比我還像新娘屁魏。我一直安慰自己滔以,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布氓拼。 她就那樣靜靜地躺著你画,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桃漾。 梳的紋絲不亂的頭發(fā)上坏匪,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音撬统,去河邊找鬼适滓。 笑死,一個胖子當(dāng)著我的面吹牛恋追,可吹牛的內(nèi)容都是我干的凭迹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼苦囱,長吁一口氣:“原來是場噩夢啊……” “哼嗅绸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起撕彤,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鱼鸠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚀狰,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡漆弄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了造锅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡廉邑,死狀恐怖哥蔚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蛛蒙,我是刑警寧澤糙箍,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站牵祟,受9級特大地震影響深夯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诺苹,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一咕晋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧收奔,春花似錦掌呜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翩肌,卻和暖如春模暗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背念祭。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工兑宇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人棒卷。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓顾孽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親比规。 傳聞我的和親對象是個殘疾皇子若厚,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容