2

私のアプリはspring+hibernate+mysqlを使用しています。

私のテーブルのいくつかは非常に大きくなり、水平分割は関連するパフォーマンスの問題を解決するのに本当に役立ちます。

私は休止状態のシャードを調べましたが、それがMavenリポジトリになく、まだ「ベータ」とラベル付けされているという事実が気に入らなかった。

mysqlパーティショニング機能の使用を検討しており、いくつか質問があります。

mysqlを使用してパーティションを作成した場合、休止状態からのエラーなしで通常どおりアプリを使用し続けることができますか?

どのmysqlパーティションを使用するかをhibernateに明示的に指示できないことを理解しています。しかし、Hibernateフィルターを使用して、どのパーティションを目指すかを「提案」した場合、mysqlはクエリを最適化し、適切なパーティションを使用しますか?

例:

テーブルを1、2、3、4の列タイプでパーティション化するとします。各タイプは異なるパーティションに移動します。

このタイプの列にHibernateフィルターを追加すると、最終的なクエリは次のようになります。

mytableからblablaを選択します。ここでstuffANDtype = 3(休止状態フィルターがtype = 3を追加しました)。

mysqlはこれを取得し、同じように扱いますか

mytable PARTITION(type3)からblablaを選択します。

4

3 に答える 3

2

@YaKはデータの場所については正しいですが、5.6のMYSQL SELECTステートメントでは、パフォーマンス上の理由から、@samzが質問したパーティションを指定できます。http://dev.mysql.com/doc/refman/5.6/en/partitioning-selection.htmlを参照してください。

于 2012-07-05T21:07:40.133 に答える
1

MySQLは、データが保存される可能性のある/保存される予定のパーティションの検索に関連するすべての汚い作業を行います。テーブルがパーティション化されているかどうかは、クライアントの観点から完全に透過的であるかどうかにかかわらず、クエリは変更されません。MySQLのようなものはありません。SELECT col FROM mytable PARTITION(p);

[編集]TJChambersが指摘してSELECT col FROM mytable PARTITION(p);いるように、v5.6の時点で存在し、明示的な手動のパーティションプルーニングが可能です。

于 2012-07-03T22:44:37.940 に答える
0

ねえ、ここでセッションを使用できますか?session.createsqlquery( "mytable PARTITION(type3)where stuffからblablaを選択してください"); 問題を解決するには?結局のところ、HibernateはネイティブAPIをサポートしています。

ありがとうSanjeevYadav

于 2013-07-04T08:57:36.477 に答える