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

MySQLのパーティショニング/シャーディング/スプリッティング-どちらに進むか?

    42 GBのテーブルがメモリに収まらなくなると、間違いなく問題が発生し始めます。実際、メモリに収まらなくなるとすぐに、パフォーマンスが非常に急速に低下します。テストする1つの方法は、RAMの少ない別のマシンにそのテーブルを配置し、パフォーマンスがどれほど低いかを確認することです。

    これは正しくありません。パーティショニング(MySQL 5.1の機能、またはMERGEテーブルを使用した同じ機能のいずれかによる)は、テーブルが同じドライブ上にある場合でも、パフォーマンスを大幅に向上させることができます。

    例として、日付範囲を使用して大きなテーブルでSELECTクエリを実行しているとします。テーブルが全体である場合、クエリはテーブル全体をスキャンするように強制されます(そして、そのサイズでは、インデックスを使用しても遅くなる可能性があります)。パーティショニングの利点は、クエリが絶対に必要なパーティションでのみ実行されることです。各パーティションのサイズが1GBで、クエリがそれ自体を満たすために5つのパーティションにアクセスするだけでよい場合、結合された5 GBのテーブルは、モンスターの42GBバージョンよりもMySQLで処理するのがはるかに簡単です。

    自問する必要があることの1つは、データをどのようにクエリするかです。クエリが特定のデータチャンク(つまり、日付範囲またはID範囲)にのみアクセスする必要がある可能性がある場合は、何らかのパーティション化が有益であることがわかります。

    特にMySQLが正しいキーを選択することに関連して、MySQL5.1のパーティショニングにはまだバグがあると聞きました。 MERGEテーブルは同じ機能を提供できますが、少し多くのオーバーヘッドが必要です。

    お役に立てば幸いです...幸運を祈ります!



    1. uniqueidentifier列を追加し、デフォルトを追加して新しいGUIDを生成します

    2. SQLNVARCHARおよびVARCHARの制限

    3. Laravel:json形式のデータをデータベースに保存する方法は?

    4. SQLの基本コマンド:例を使用して単純なクエリを作成する方法