私のプロジェクトでは、約 20 列のテーブルがあります。列「ステータス」でテーブルを分割しました。簡単にするために、ステータス "ERROR" と "SUCCESS" の 2 つの可能な値があるとしましょう。したがって、テーブルには p1 と p2 という 2 つのパーティションがあります。選択クエリはステータスに応じて where 句で異なる列を使用するため、各パーティションに異なるインデックスを設定する必要があります。たとえば、パーティション p1 には列 1 と列 2 にインデックスが必要ですが、パーティション p2 には列 4 と列 5 にインデックスが必要です。ただし、MySql 5.5 ではパーティション レベルでインデックスを適用できないことがわかりました。
したがって、他のオプションとして、ステータスごとに異なるテーブルを用意することもできます。アプリケーション層で Hibernate を使用しています。両方のテーブルに 1 つのエンティティ クラスを使用するように Hibernate を構成することは可能ですか。そのため、ステータスが「ERROR」から「SUCCESS」に変わると、レコードはバックグラウンドでエラー テーブルから成功テーブルに自動的に移動されます。開発者として、私は Entity オブジェクトで作業するだけでよく、どのテーブルからピックアップされているかを心配する必要はありません。Hibernate は、あるテーブルから別のテーブルへのデータの移動を処理する必要があります。このようにして、さまざまなテーブルでさまざまなインデックスを維持できます。これは、db パーティショニングよりも手動パーティションに似ています。
Hibernate Shard プロジェクトについて聞いたことがあります。しかし、同じテーブルに対して異なるデータベースがある場合に便利だと思います。ここでは、同じエンティティに対して 2 つのテーブルを持つ単一のデータベースがあります。