0

tblAdmissions というテーブルが 1 つあります。このテーブルの列の 1 つは「ProgramInformation」と呼ばれます。この列には、次のようなxml文字列が含まれています

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" num="1">

  <COURSE>reference_project</COURSE>

  <FEE>true</FEE>

</row>

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" num="2">
  <COURSE>RoomID</COURSE>
  <FEE>99</FEE>

</row>

このクエリを使用して、クロス適用を使用してこの列から値を取得していますが、非常に遅いです。


vDynamic AS を使用 (選択

            xmlProgramInformation = CAST(ProgramInformation AS XML)
        FROM 
            tblAdmission

        )

SELECT 

  t.p.query('COURSE' ).value('.', 'varchar(max)') AS Decipline, 
  t.p.query('FEE' ).value('.', 'varchar(max)') AS CourseFee 

FROM 
  vDynamic 
  CROSS apply xmlProgramInformation.nodes('/DOCUMENT/ROWS/row') AS t(p)

私のクエリを高速に実行できるようにする他の方法はありますか?

ありがとう

4

1 に答える 1

0

実装が最も簡単なものから最も難しいものまで、試すことができるいくつかのこと:

  1. すべてのデータが XML である場合は、nvarchar を XML 列に変更します。これがパフォーマンスに目立った影響を与えないことは比較的確信していますが、次のステップの基礎となります.

  2. XML インデックスを実装します。詳細はBooks Onlineをチェック

  3. クエリしている属性が固定されている場合は、先に進み、それらを固定されたテーブル形式に分割することをお勧めします。SQL Server は SQL を優先します。XML と XQuery は、アドホックな調査や変革的な作業に使用する必要があります。

于 2011-10-20T13:25:04.540 に答える