INCLUDE 列を含む非クラスター化インデックスを作成する必要があります (下の<create>
タグを参照)。マッピング ファイルは次のとおりです。
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="MyApp" assembly="MyApp">
<class name="User" table="user" >
<id name="Id" type="Guid" column="user_id">
<generator class="guid.comb"/>
</id>
<property name="Name" column="name" not-null="true" />
<property name="Phone" column="phone" />
<property name="Zipcode" column="zipcode" />
</class>
<database-object>
<create>
CREATE NONCLUSTERED INDEX [IX_user_zipcode_id]
ON User (Zipcode)
INCLUDE (Name, Phone)
</create>
<drop>
DROP INDEX IX_user_zipcode_id
</drop>
<dialect-scope name="NHibernate.Dialect.MsSql2000Dialect"/>
<dialect-scope name="NHibernate.Dialect.MsSql2005Dialect"/>
<dialect-scope name="NHibernate.Dialect.MsSql2008Dialect"/>
</database-object>
</hibernate-mapping>
私が抱えている問題は、インデックスがまったく作成されていないことです。何も起こっていないようです。初めて使う<database-object>
ので何か間違っているかもしれません。
INCLUDE は SQL Server 固有のものであると推測しているため、方言スコープが存在します。単一列および複数列のインデックスを作成する方法は知っていますが、これは私が望んでいるものではありません。クエリの INCLUDE 句のユーザー テーブル部分に、zipcode と他のすべての列に 1 つの列のインデックスが必要です。マッピング ファイルまたはその他の方法を使用して、このタイプのインデックスを作成する方法はありますか?
これはおそらくロングショットですが、すべての列を指定する必要はなく、クエリの INCLUDE 部分でインデックス付きの列を指定する必要はありません...代わりに、プロパティとして追加されるインデックスに新しい列を nhibernate に追加させるだけですマッピングファイルに。