2011-02-03 14 views
1

私はMysqlと共にPlay Frameworkを通じてJPAを使用しています。JPA:外部キーによって参照されるテーブルの別のフィールドによるインデックス作成

のは、次のように私はJQLクエリがあるとしましょう:

SELECT p FROM Person p WHERE p.address.city = 'New York' 

アドレスフィールドには、アドレステーブルへの外部キー参照です。

私の理解では、このクエリでは、Personテーブル全体のテーブルスキャンと、「アドレス」フィールドの逆参照と、Addressテーブルのスキャンを実行する必要があります。 Addressオブジェクトのcityフィールドが索引付けされていても、Personテーブル全体のスキャンを探しています。

JPA/MySqlで可能なのは、Personテーブルのp.address.cityのインデックスを何らかの形で作成してこのクエリを高速化したいのですが?

+0

あなたは解決策を見つけましたか? – user482745

答えて

0

あなたが

@org.hibernate.annotations.Table(
    name="table_name", 
    indexes = { @Index(name="idx_", columnNames = { "xxx", "xx" }) } 
    ) 

したり、列に注釈を付け@Index自分のアノテーションを使用することができます休止状態を使用している場合、私は、私は、これは

を役に立てば幸い

org.hibernate.annotationsパッケージから(モデルに配置された)、そう信じて

+0

これは簡単なインデックスを作成する方法ですが、外部テーブルの列のインデックスを作成するにはどうすればよいですか? – sanity

+0

さて、関係を設定しましたか? ORMが自動的にインデックスを設定する関係になったら、少なくともHibernateが設定したスキーマを見てみると、私は考えました。多分私はあなたの質問を誤解しています – allenskd

+1

私は、ORMがAddressオブジェクトの主キーを含むPersonの "address"フィールドのインデックスを設定すると思います。ただし、Personオブジェクトのaddressオブジェクトの "city"フィールドのインデックスは設定されないため、上記のクエリではPersonオブジェクトのテーブルスキャンが必要です。 – sanity

関連する問題