3

ビューにマップされたクラスがあり、患者の記録を検索するために姓と名を検索しています。ビューは最終的に患者テーブルの名字フィールドを調べます (入力によっては他のフィールドも表示される可能性があります)。条件が SQL に変換されると、文字列が nvarchar パラメータとして入力されます。マッピングで既に type="AnsiString" と length="50" を使用していますが、これらを nvarchar に変換しているため、クエリのパフォーマンスが低下しています。

  <class name="PatientSearchResult" table="vw_PatientSearch" mutable="false" >
    <id name="Id" type="Guid" column="PatientId"/>

    <property name="MedicalRecordNumber" type="AnsiString" length="50" />
    <property name="Title" />
    <property name="FirstName" type="AnsiString" length="50" />
    <property name="MiddleName" />
    <property name="LastName" type="AnsiString" length="50" />
    <property name="Nickname" />
    <property name="Suffix" />
    <property name="DateOfBirth" />
    <property name="IsRestricted" />
    <property name="IsDeleted" />

    <component name="Address">
      <property name="StreetAddress1" />
      <property name="StreetAddress2" />
      <property name="City" />
      <property name="State" />
      <property name="PostalCode" />
    </component>

  </class>

SQL プロファイラーは、nvarchar パラメーターを使用し、すべての文字列の前に N を付けてキャストするように出力 SQL を表示しています。

何か不足していますか?基準またはマッピングに対して他に行う必要があることはありますか? さらに、パラメーターの長さも定数の 50 ではありません。NHibernate 2.1 を使用しています。

4

2 に答える 2

2

これを試して

<property name="FirstName" length="50">
    <column name="first_name" sql-type="varchar(50)" />
</property>
于 2012-02-09T06:36:13.430 に答える
2

マッピングで sql-type 属性を使用してみてください。

<property name="FirstName" length="50" />
    <column sql-type="varchar(50)" />
</property>

どのようなパフォーマンスの問題がありますか? 文字列をユニコードとして扱うことがパフォーマンスにそれほど影響を与えるとは思えません。

于 2012-02-09T02:59:08.137 に答える