MySQL のパフォーマンス: インデックスを持つ単一の大きなテーブルと複数のパーティション化されたテーブル
概要
高性能データベース システムを設計する場合、インデックスを備えた単一のテーブルを使用するか、複数の小さなテーブルを使用するかの選択が議論の対象になります。この記事では、ユーザー統計を含むテーブルに関係する特定のシナリオに焦点を当てて、各アプローチの長所と短所を検討します。
シナリオ
次の内容を含む「statistics」という名前のテーブルを考えます。ユーザー情報。このテーブルには、user_id、アクション、タイムスタンプを含む約 3,000 万行と 10 列があります。最も一般的なデータベース操作は、user_id によるデータの挿入と取得です。
インデックス付き単一テーブル
従来のアプローチは、user_id にインデックスを持つ単一テーブルを作成することです。カラム。これにより、インデックスが直接検索パスを提供するため、user_id に基づいてデータを効率的に取得できます。ただし、テーブルが大きくなるにつれて、インデックスのサイズが増加し、検索される行数が増加するため、INSERT 操作と SELECT 操作の両方が遅くなります。
複数のパーティション テーブル
別のアプローチは、ユーザーごとに個別の統計テーブルを作成することです。この場合、各テーブルは大幅に小さくなり、1 人のユーザーのデータのみが含まれます。これにより、インデックスの必要性がなくなり、INSERT および SELECT 操作中に処理されるデータの量が大幅に削減される可能性があります。ただし、これによって新たな課題が生じます。それは、複数のテーブル (場合によっては数千、数万) を管理する必要があるということです。
実際の考慮事項
多数のテーブルの作成
MySQL パーティショニング
MySQL は、ユーザーごとに複数のテーブルを作成する代わりに、単一のテーブルを複数の物理パーティションに論理的に分割できるパーティショニング機能を提供します。各パーティションは独自のファイルに保存され、データは指定されたパーティション キー (この場合は user_id) に基づいてパーティション間で分散されます。
パーティショニングにはいくつかの利点があります:
推奨事項
説明されているシナリオに基づくの場合、HASH パーティション キーを使用して「統計」テーブルをパーティション化することは、単一のインデックス付きテーブルや複数のユーザー固有のテーブルよりも効率的でスケーラブルなソリューションになります。データを複数のパーティションに分割することで、MySQL は特定の user_id クエリに関連する行のサブセットに迅速にアクセスできるため、インデックスの必要性がなくなり、処理されるデータ量が削減されます。
以上がMySQL の大規模なユーザー統計テーブルをいつパーティション分割する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。