首頁  >  文章  >  資料庫  >  MySQL一張表到底能存多少資料?

MySQL一張表到底能存多少資料?

WBOY
WBOY轉載
2023-01-22 07:30:013297瀏覽

這篇文章為大家帶來了關於mysql的相關知識,程式設計師平時和mysql打交道一定不少,可以說每天都有接觸到,但是mysql一張表到底能存多少資料呢?計算根據是什麼呢?下面一起來探討一下,希望對大家有幫助。

MySQL一張表到底能存多少資料?

1、知識準備

1.1、資料頁

在作業系統中,我們知道為了跟磁碟交互,記憶體也是分頁的,一頁大小4KB。同樣的在MySQL中為了提高吞吐率,資料也是分頁的,不過MySQL的資料頁大小是16KB。 (確切的說是InnoDB資料頁大小16KB)。詳細學習可以參考官網 我們可以用以下指令查詢。

mysql> SHOW GLOBAL STATUS LIKE 'innodb_page_size';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.00 sec)

今天咱們資料頁的具體結構指標等不深究,知道它預設是16kb就行了,也就是說一個節點的資料大小是16kb

1.2、索引結構(innodb)

mysql的索引結構咱們應該都知道,是如下的b 樹結構

MySQL一張表到底能存多少資料?

#通常b 樹非葉子節點不儲存數據,只有葉子節點(最下面一層)才儲存數據,那麼咱們說回節點,一個節點指的是(對於上圖而言)

MySQL一張表到底能存多少資料?

每個紅框選中的部分稱為一個節點,而不是說某個元素。在了解了節點的概念和每個節點的大小為16kb之後,咱們計算mysql能儲存多少資料就容易很多了

2、具體計算方法

2.1、根節點計算

首先咱們只看根節點

例如我們設定的資料型別是bigint,大小為8b

MySQL一張表到底能存多少資料?

在資料本身如今還有一小區塊空間,用來儲存下一層索引資料頁的位址,大小為6kb

MySQL一張表到底能存多少資料?

#所以我們是可以計算出來一個資料為(8b 6b=14b)的空間(以bigint為例) 我們剛剛說到一個資料頁的大小是16kb,也就是(16*1024)b,那麼根節點是可以儲存(16*1024/(8 6))個資料的,結果大概是1170個資料如果跟節點的計算方法計算出來了,那麼接下來的就容易了。

2.2、其餘層節點計算

第二層其實比較容易,因為每個節點資料結構和跟節點一樣,而且在跟節點每個元素都會延伸出來一個節點,所以第二層的資料量是1170*1170=1368900,問題在於第三層,因為innodb的葉子節點,是直接包含整條mysql資料的,如果欄位非常多的話資料所佔空間是不小的,我們在這裡以1kb計算,所以在第三層,每個節點為16kb,那麼每個節點是可以放16個資料的,所以最終mysql可以儲存的總資料為

1170 * 1170 * 16 = 21902400 (千萬級條)

其實計算結果與我們平時的工作經驗也是相符的,一般mysql一張表的數據超過了千萬也是得進行分錶操作了。

3、總結

最後用一張圖片總結一下今天討論的內容,希望您能喜歡

推薦學習:mysql影片教學

#

以上是MySQL一張表到底能存多少資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除