MySQL テーブルの最大サイズは? 50GBで200万ですか?80GBで500万?
サイズスケールの上限では、データの圧縮について考える必要がありますか? または、テーブルが大きくなりすぎた場合はテーブルを分割しますか?
私はかつて、非常に大きな (テラバイト以上) MySQL データベースを扱っていました。私たちが持っていた最大のテーブルは、文字通り 10 億行を超えていました。
出来た。MySQL はほとんどの場合、データを正しく処理しました。非常に扱いにくかったですが。
データをバックアップして保存するだけでも大変でした。必要に応じてテーブルを復元するには数日かかります。
1,000 万から 1 億行の範囲の多数のテーブルがありました。テーブルへの重要な結合は時間がかかりすぎて、永遠にかかります。そのため、テーブルを「ウォーク」し、「id」の範囲に対して結合を処理するストアド プロシージャを作成しました。このようにして、一度に 10 ~ 100,000 行のデータを処理します (id の 1 ~ 100,000 に対して結合し、次に 100,001 ~ 200,000 など)。これは、テーブル全体に対して結合するよりも大幅に高速でした。
主キーに基づいていない非常に大きなテーブルでインデックスを使用することも、はるかに困難です。Mysql はインデックスを 2 つの部分に分けて格納します。インデックス (プライマリ インデックス以外) をプライマリ キー値のインデックスとして格納します。そのため、インデックス付きルックアップは 2 つの部分で行われます。最初に MySQL はインデックスに移動し、検索する必要があるプライマリ キー値をそこから取得します。次に、プライマリ キー インデックスで 2 回目のルックアップを実行して、それらの値がどこにあるかを見つけます。
つまり、非常に大きなテーブル (100 万から 2 億以上の行) の場合、テーブルに対するインデックス作成はより制限的になります。より少ない単純なインデックスが必要です。また、直接インデックスにない単純な select ステートメントを実行しても、元に戻らない可能性があります。Where 句はインデックスにヒットするか、それを忘れる必要があります。
しかし、そうは言っても、物事は実際に機能しました。これらの非常に大きなテーブルで MySQL を使用して計算を行い、正しい答えを得ることができました。
最初の質問についてですが、データベースの有効な最大サイズは通常、オペレーティング システムによって決まります。具体的には、MySQL サーバー自体ではなく、MySQL サーバーが作成できるファイル サイズです。これらの制限は、テーブルサイズの制限に大きな役割を果たします。また、MyISAM は InnoDB とは動作が異なります。したがって、すべてのテーブルはこれらの制限に依存します。
InnoDB を使用すると、テーブル サイズを操作するためのオプションが増えます。この場合、テーブルスペースのサイズ変更はオプションであるため、サイズ変更を計画している場合は、これが最適です。The table is full error ページを見てください。
必要なすべての情報 (OS、テーブルの種類、列、それぞれのデータ型とサイズなど...) が与えられた場合の各テーブルの実際のレコード数はわかりません。また、この情報が簡単に計算できるかどうかもわかりませんが、いくつかのケースで約 1bi レコードの単純なテーブルを見てきましたが、MySQL はあきらめませんでした。