sql >> データベース >  >> RDS >> Mysql

MySQLテーブルには大きすぎますか?

    「大きすぎる」という質問に対する一般的な解決策はありません。このような懸念は、データをどのように処理しているか、パフォーマンスに関する考慮事項に依存することがよくあります。

    テーブルサイズにはいくつかの基本的な制限があります。 1000列を超えることはできません。レコードはそれぞれ8kを超えることはできません。これらの制限は、データベースエンジンによって異なります。 (ここにあるのはInnoDB用です。)

    複数の異なるデータセットを1つのテーブルにマージしたようです。おそらく、このレコードがどのデータセットに関連するかを示すいくつかのフィールド、いくつかのデータフィールド、およびいくつかのタイムスタンプ情報があります。これはそれほど広い記録ではありません(たとえば、各リクエストのすべての入力パラメータをログに記録している場合を除きます)。主な問題は選択性にあります。 。このテーブルに意味のある方法でインデックスを付けるのは難しいでしょう。共通フィールドを十分に選択できるので、テーブルを参照せずにそれらを使用して目的のレコードに到達できる場合、それは大きなプラスになります。 (テーブルスキャンを参照)

    1日あたりのレコード数が多い場合(基本的には1日2秒で、ピークロード期間がはるかに長いと推測されます)、挿入速度の向上 。原則として、インデックスが多いほど挿入が遅くなります。可能であれば、古いレコードを別のテーブルに完全にアーカイブすることを検討してください。以前の職場では、先月、過去3か月、過去6か月のアーカイブ戦略を、それぞれ別々のテーブルで使用しました。もう1つのアイデアは、古いレコードを削除することです。多くの環境では、特定の日付以降の情報は必要ありません。 3か月前の記録を記録し続けることは、多くの場合、非常に高額です。

    最後に、物理的なストレージをおろそかにしないでください あなたのテーブルの。レコードが薄いほど、レコードを読み取る(または、さらに言えば、挿入する)ために必要な物理IOが少なくなります。インデックスは別の物理ハードドライブに保存できます。レコードに冗長データがたくさんある場合、圧縮されたテーブルを保存すると、実際には速度が向上する可能性があります。少しでもお金がかかる場合は、データをストライピングするための優れたRAIDアレイの価値を検討してください。

    それで、あなたの基本的な質問に答えるために:それはたくさんの記録です、しかしチューニングに注意深く目を向ければ、それは問題ではありません。



    1. SQLの使用方法-INSERT...ON DUPLICATE KEY UPDATE?

    2. データベース内のアクセントや奇妙な文字を処理する方法は?

    3. 古いmysql_*APIを使用して行が存在するかどうかを確認します

    4. groupbyによって返されたレコードの数をカウントします