まず、データベースに含まれる最大のテーブルに関してデータベースのサイズを見積もる方法を知りたいと思います。私は次のことをしました:
+----------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| users_id | int(32) unsigned | NO | MUL | NULL | |
| s | binary(16) | NO | PRI | NULL | |
| t | binary(16) | NO | PRI | NULL | |
| x | binary(16) | NO | PRI | NULL | |
+----------+------------------+------+-----+---------+-------+
これはサイズにとって重要なテーブルです(他のテーブルはユーザーデータ(id、user、pass、email)を維持するためだけのものであり、100を超えるエントリがあるとは思われません)。
上記の表には、約7.61263 * 10 ^ 9のエントリがあると思います。私はこの簡単な計算を行いました:7.61263 * 10 ^ 9 +(4バイト+16バイト+16バイト+16バイト)〜= 395GB。しかし、dbms(インデックス、データベース構造など)からのオーバーヘッドを考慮する方法がわかりませんか?
データベースサイズを見積もる方法は?
この大きなテーブルで実行されているMySQLの速度と安定性についてはどうでしょうか。サイズを小さくするために、データを2つ以上のデータベースに分割する必要がありますか?
サイズとの両方の速度について質問する限り、そうです、ラッセルの権利です。実際に テーブルにサンプルデータを入力する 、代表的なクエリをテストして、それらがどのように実行されるかを確認する必要があります。
サイズの問題については、インデックスの正確なサイズを常に計算できるとは限りませんが、MySQLのドキュメント データ型ストレージ要件 および 使用しているストレージエンジン)の適切なドキュメントを参照してください。 using。 は、行のオーバーヘッドに関する情報と、インデックスを推定するためのガイダンスです。
(たとえば、MyISAMの行で2 ** 32の制限に達するため、 大きなテーブルのサポート でビルドする必要があります)
複数のデータベースが必要かどうかについては、そうすべきではありません。複数のテーブルに分散する必要がある場合は、いつでも partitioning を使用できます。これは、 ファイルシステムの制限 に反対している場合にも役立つと思います。
データを生成してテーブルに入力する単純なループを記述します。そうすれば、これらすべての質問に、はるかに正確かつ正確に答えることができます。実世界のテストを行うのに最小限の時間がかかります。
MyISAMの場合、指定した計算に1行あたり1バイトを追加します。 dataを処理します。各インデックスについて、計算は次のようになります
InnoDBの場合、計算は非常に面倒です。簡単な答えは、MyISAMのデータとインデックスのサイズを取得してから、2または3を掛けることです。
DESCではなくSHOWCREATE TABLEを使用してください-インデックスが実際に表示されません。PKが大きく、セカンダリキーに悪影響を及ぼしていると思われます。