淺談mysql一張表到底能存多少數(shù)據(jù)
程序員平時和mysql打交道一定不少,可以說每天都有接觸到,但是mysql一張表到底能存多少數(shù)據(jù)呢?計算根據(jù)是什么呢?接下來咱們逐一探討
知識準備
數(shù)據(jù)頁
在操作系統(tǒng)中,我們知道為了跟磁盤交互,內(nèi)存也是分頁的,一頁大小4KB。同樣的在MySQL中為了提高吞吐率,數(shù)據(jù)也是分頁的,不過MySQL的數(shù)據(jù)頁大小是16KB。(確切的說是InnoDB數(shù)據(jù)頁大小16KB)。詳細學習可以參考官網(wǎng)我們可以用如下命令查詢到。
mysql> SHOW GLOBAL STATUS LIKE 'innodb_page_size'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_page_size | 16384 | +------------------+-------+ 1 row in set (0.00 sec)
今天咱們數(shù)據(jù)頁的具體結構指針等不深究,知道它默認是16kb就行了,也就是說一個節(jié)點的數(shù)據(jù)大小是16kb
索引結構(innodb)
mysql的索引結構咱們應該都知道,是如下的b+樹結構

通常b+樹非葉子節(jié)點不存儲數(shù)據(jù),只有葉子節(jié)點(最下面一層)才存儲數(shù)據(jù),那么咱們說回節(jié)點,一個節(jié)點指的是(對于上圖而言)

每個紅框選中的部分稱為一個節(jié)點,而不是說某個元素。了解了節(jié)點的概念和每個節(jié)點的大小為16kb之后,咱們計算mysql能存儲多少數(shù)據(jù)就容易很多了
具體計算方法
根節(jié)點計算
首先咱們只看根節(jié)點
比如我們設置的數(shù)據(jù)類型是bigint,大小為8b

在數(shù)據(jù)本身如今還有一小塊空間,用來存儲下一層索引數(shù)據(jù)頁的地址,大小為6kb

所以我們是可以計算出來一個數(shù)據(jù)為(8b+6b=14b)的空間(以bigint為例)我們剛剛說到一個數(shù)據(jù)頁的大小是16kb,也就是(161024)b,那么根節(jié)點是可以存儲(161024/(8+6))個數(shù)據(jù)的,結果大概是1170個數(shù)據(jù)如果跟節(jié)點的計算方法計算出來了,那么接下來的就容易了。
其余層節(jié)點計算
第二層其實比較容易,因為每個節(jié)點數(shù)據(jù)結構和跟節(jié)點一樣,而且在跟節(jié)點每個元素都會延伸出來一個節(jié)點,所以第二層的數(shù)據(jù)量是1170*1170=1368900,問題在于第三層,因為innodb的葉子節(jié)點,是直接包含整條mysql數(shù)據(jù)的,如果字段非常多的話數(shù)據(jù)所占空間是不小的,我們這里以1kb計算,所以在第三層,每個節(jié)點為16kb,那么每個節(jié)點是可以放16個數(shù)據(jù)的,所以最終mysql可以存儲的總數(shù)據(jù)為
1170 * 1170 * 16 = 21902400 (千萬級條)
其實計算結果與我們平時的工作經(jīng)驗也是相符的,一般mysql一張表的數(shù)據(jù)超過了千萬也是得進行分表操作了。
總結
最后用一張圖片總結一下今天討論的內(nèi)容,希望您能喜歡

到此這篇關于淺談mysql一張表到底能存多少數(shù)據(jù)的文章就介紹到這了,更多相關mysql表存多少數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解MySQL監(jiān)控工具 mysql-monitor
這篇文章主要介紹了解MySQL監(jiān)控工具 mysql-monitor的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-07-07
MySQL學習(七):Innodb存儲引擎索引的實現(xiàn)原理詳解
這篇文章主要介紹了Innodb存儲引擎索引的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04
使用mss2sql工具將SqlServer轉(zhuǎn)換為Mysql全記錄
上篇文章我們講訴了在mssql數(shù)據(jù)轉(zhuǎn)換成mysql數(shù)據(jù)中,用Navicat Premium導入數(shù)據(jù)很完美,但是創(chuàng)建表的時候數(shù)據(jù)類型轉(zhuǎn)換不是很完美,本文我們來講訴下用mss2sql工具來創(chuàng)建表,順便說下導入數(shù)據(jù)2014-08-08
MySQL中表復制:create table like 與 create table as select
這篇文章主要介紹了MySQL中表復制:create table like 與 create table as select,需要的朋友可以參考下2014-12-12

