MySQL テーブルにはどのくらいの量のデータを保存できますか?

MySQL テーブルにはどのくらいの量のデータを保存できますか?

プログラマーは MySQL を扱う機会が多く、毎日触れているとも言えますが、MySQL テーブルにはどれくらいの量のデータを保存できるのでしょうか。計算の根拠は何ですか?次に、一つずつ説明していきましょう

知識の準備

データページ

オペレーティング システムでは、ディスクと対話するために、メモリもページ サイズが 4 KB でページ化されることがわかっています。同様に、MySQL でもスループットを向上させるためにデータがページングされますが、MySQL のデータ ページ サイズは 16 KB です。 (正確には、InnoDB データ ページのサイズは 16KB です)。詳しい学習方法は公式サイトを参照してください。以下のコマンドで問い合わせることができます。

mysql> 'innodb_page_size' のようなグローバルステータスを表示します。
+------------------+-------+
| 変数名 | 値 |
+------------------+-------+
| Innodb_ページサイズ | 16384 |
+------------------+-------+
セット内の 1 行 (0.00 秒)

今日は、データ ページの特定の構造ポインターについては詳しく説明しません。デフォルトで 16kb に設定されており、ノードのデータ サイズが 16kb であるということだけを知っておいてください。

インデックス構造 (innodb)

MySQLのインデックス構造は誰もが知っていますが、それは次のB+ツリー構造です。

通常、B+ツリーの非リーフノードにはデータは保存されません。リーフノード(最下層)のみがデータを保存します。それではノードについてお話ししましょう。ノードとは(上の図の場合)

赤いボックスで選択された各部分は、要素ではなくノードと呼ばれます。ノードの概念と各ノードのサイズが 16kb であることを理解した後は、MySQL が保存できるデータの量を計算するのがはるかに簡単になります。

具体的な計算方法

ルートノードの計算

まず、ルートノードを見てみましょう

たとえば、設定するデータ型はbigintで、サイズは8bです。

データ自体に、次のレベルのインデックスデータページのアドレスを格納するために使用される6KBの小さなスペースがあります。

したがって、(8b+6b=14b) のデータ空間を計算できます (bigint を例にとると)。データ ページのサイズは 16kb、つまり (16 1024)b であると言いましたが、ルート ノードには (16 1024/(8+6)) のデータ、つまり約 1170 個のデータを保存できます。ノード計算方式で計算すると、次のステップは簡単になります。

他のレイヤーのノードの計算

2層目は実は簡単です。各ノードのデータ構造はルートノードと同じで、ルートノードの各要素はノードに拡張されるため、2層目のデータ量は1170*1170=1368900です。問題は3層目にあります。InnoDBのリーフノードにはMySQLデータ全体が直接含まれているからです。フィールドが多いと、データが占めるスペースは小さくありません。ここでは1kbと計算しているので、3層目では各ノードは16kbで、各ノードは16個のデータを保持できるため、最終的にMySQLが保存できるデータの合計は次のようになります。

1170 * 1170 * 16 = 21902400 (数千万)

実際、計算結果は私たちの通常の仕事の経験と一致しています。一般的に、MySQL テーブル内のデータが 1,000 万を超える場合は、テーブルに分割する必要があります。

要約する

最後に、今日話し合ったことを写真を使ってまとめたいと思います。気に入っていただければ幸いです。

MySQL テーブルに保存できるデータ量に関するこの記事はこれで終わりです。MySQL テーブルに保存できるデータ量の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • pymysqlを使用してデータベースをクエリし、結果をリストとして保存し、指定された要素インデックスインスタンスを取得します。
  • MySQL でストアド プロシージャを作成し、データ テーブルに新しいフィールドを追加する方法の分析
  • DjangoはMysqlデータベースの既存のデータテーブル方式を使用します
  • MySQL データテーブルストレージエンジンを変更する3つの方法
  • MySQLは動的にテーブルを作成し、テーブルにデータを保存します。

<<:  react+antd.3x は IP 入力ボックスを実装します

>>:  Dell R720 サーバーに Windows Server 2008 R2 をインストールする方法

推薦する

VMware15/16 VMwareのロックを解除してMacOSをインストールする詳細な手順

VMware バージョン: VMware-workstation-full-16 VMware バー...

MySQLにおけるSQLの実行順序についてのちょっとした質問

今日、仕事中に左結合に関するSQLの問題に遭遇しました。後で解決しましたが、この問題を通じてSQLの...

MySql データベースにリモートでログインするにはどうすればよいですか?

はじめに: プロジェクトを開発するために、サーバーに MySql データベース サーバーを展開し、ロ...

CSSは、マウスを線の上に置くと線全体の色を変える効果を実現します。

まとめ:以下のように、CSS で指定した行にマウスを置いたときに行全体の色を変更する方法を示します。...

プロジェクトにおける CSS グリッドシステムの柔軟な使用方法の詳細な説明

序文CSS グリッドは通常、さまざまなフレームワークにバンドルされていますが、実際のビジネス ニーズ...

VMware vSAN 入門概要

1. 背景1. vSphere の共有ストレージの背景を簡単に紹介するvSphere の重要な機能は...

JS を使用して要素が配列であるかどうかを判断する例

検証できるデータの種類は次のとおりです a = [1,2,3,4,5,6]とします。 b = [とし...

js を使用して QR コードを生成するサンプル コード

以前、プロジェクトでQRコードをスキャンして情報を表示する機能を開発する必要がありました。インターネ...

Linux で MySQL パスワードを忘れた場合の解決策

問題は次のとおりです。mysql -uroot -p コマンドを入力しましたが、パスワードを忘れてし...

Web デザイン TabIndex 要素

TabIndex は、Tab キーを押して、定義された TabIndex 要素を順番に取得し、各要素...

WeChat アプレットの日付と時刻のコンポーネント (年、月、日、時間、分)

この記事の例では、WeChatアプレットの日付と時刻コンポーネントの具体的なコードを参考までに共有し...

VMware 仮想マシン (CentOS7 イメージ) を使用して Linux をインストールする

1. VMwareのダウンロードとインストールリンク: https://www.jb51.net/s...

スネークゲームを作るための Pygame コード

目次使用されるPygame関数スクリーンの作成ヘビの作成ヘビを動かすゲームオーバーの処理食事を増やす...

スーパーバイザーによるDockerfileのマルチサービスイメージパッケージ操作

Dockerfileの作成yumソースを設定する cd /tmp/docker vim Docker...

MySQL エラー コード 1064 の解決策

SQL ステートメント内の単語が mysql のキーワードと競合する場合は、`` (タブ キーの上)...