INCLUDE 열을 가진 비 클러스터형 인덱스를 생성해야합니다 (아래 <create>
태그 참조). 다음은 매핑 파일입니다.nhibernate 매핑 파일을 사용하여 "Include"열이 포함 된 커버 색인을 만듭니다.
<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와 관련이 있기 때문에 dialect-scope가있는 이유입니다. 단일 및 다중 열 인덱스를 만드는 방법을 알고 있지만 이것이 내가 원하는 것은 아닙니다. 쿼리의 INCLUDE 절의 User 테이블 부분에 zipcode 및 다른 모든 열에 단일 열 인덱스를 지정합니다. 매핑 파일 또는 다른 방법을 사용하여 이러한 유형의 인덱스를 만들 수있는 방법이 있습니까?
이것은 아마도 길지만, 쿼리의 INCLUDE 부분에있는 모든 열을 지정하지 않아도 좋을 것 같습니다 ... 대신 nhibernate가 인덱스에 새로운 열을 추가하도록합니다. 맵핑 파일에 특성으로 추가됩니다.