中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Navicat統計的行數和表實際行數不一致的問題怎么理解

發布時間:2021-12-03 09:01:45 來源:億速云 閱讀:376 作者:iii 欄目:開發技術

本篇內容介紹了“Navicat統計的行數和表實際行數不一致的問題怎么理解”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

背景

近期為了保障線上數據庫的穩定性,我決定針對一些大表的歷史數據有計劃地進行備份遷移,但是呢,發現一個奇特的現象,Navicat統計行數和表自身count統計數竟然不一致!?0.0

Navicat

Navicat作為數據庫管理工具,在業界廣受歡迎,先甭管你電腦上現在正在運行的Navicat是正版還是盜版(你不說我也知道),不可否認的是,在我從事17年從事后端開發以來,嘗試了很多同類工具,Navicat在功能上完全碾壓其他數據庫管理工具,尤其是細節方面,在這里不一一列舉了,總之一個字,就是很好用(不接受反駁,除非你說出來一個讓我心服口服的工具)。

整個經過

這次大表遷移備份,我的整體思路是:首先用Navicat對庫內所有的表按照行數降序排序,然后選取Top10進行遷移備份。但是一如既往細心的我發現,它界面的統計行數竟然和我自己count這張表行數不一致?!難道要顛覆我對Navicat的認可嘛。

Navicat統計的行數和表實際行數不一致的問題怎么理解

select count(1) from big_table_name;

為什么呢?

這讓我很是詫異,一度以為自己出現了幻覺,再三確認自己沒有帶VR眼鏡后,我踏上了尋找答案的征程。我開始思考,Mysql作為一個數據庫,自身肯定就有各個表的統計,而Navicat只是作為一個可視化界面,讓數據肉眼可見。

Navicat:這鍋我可不背。

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

select * from information_schema.TABLES;

查看了這張表以后,發現表里統計記錄TABLE_ROWS字段的確實與事實count不符……

這又是為什么呢?

我又陷入了沉思,帶著疑惑,繼續翻閱著文檔,突然,看到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.

看了這段話我頓悟啦,你是不是也明白怎么回事啦。什么?你沒看太明白?好吧,沒關系,你可能需要通過翻譯軟件的直譯+理解,才懂得其中真正的含義。原來,TABLE_ROWS這個字段不同存儲引擎的計數規則不一致,比如MyISAM引擎這表存儲TABLE_ROWS存儲的就是精確的行數,而對于其他的存儲引擎,比如 InnoDB,這個值只是一個近似值,與實際值相差40%-50%左右。所以,在這種情況下,我們想要得到一個準確的計數,只能使用 SELECT COUNT(*) 來獲得。

那又如何修正呢?

雖然疑惑得到了解答。但,和我一樣有強迫癥的朋友肯定會問,如何修正這個值呢?真是知道越多,未知越多,網上說可以通過

Analyze table big_table_name

得以更正這個數據,但是我動手執行之后發現,并不能更正數據,且該操作不僅耗時還會鎖表,并不推薦使用……說到這,我的強迫癥竟然不治自愈了。

“Navicat統計的行數和表實際行數不一致的問題怎么理解”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

育儿| 闽侯县| 泊头市| 珠海市| 湘西| 鲁甸县| 吐鲁番市| 拉萨市| 剑阁县| 绥中县| 阿合奇县| 云安县| 柳河县| 平定县| 吉首市| 包头市| 梁山县| 临沧市| 乌鲁木齐县| 托克托县| 瓮安县| 林甸县| 岳阳县| 札达县| 通海县| 历史| 武义县| 闽侯县| 天台县| 达拉特旗| 杨浦区| 阿拉善盟| 阿尔山市| 游戏| 罗甸县| 黑河市| 错那县| 雅江县| 抚松县| 广汉市| 龙井市|