2011-10-20 15 views
0

私はtblAdmissionsという1つのテーブルを持っていますが、このテーブルの列の1つは "ProgramInformation"と呼ばれています。この列には、私はクロスを適用し、その非常に遅い使用して、この列の値を取得するには、このクエリを使用していますnvarchar列からxmlノード値を取得するSQLクエリが非常に遅い

<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> 


のようなXML文字列が含まれています。私のクエリが高速に実行できるように

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) 

他の方法があります。

おかげ

+0

誰かがより良い解決策を知っています。 – user999896

答えて

0

あなたが試すことができますいくつかのものは、最も簡単に実施するのが最も難しいものから始めて:

  1. すべてのデータがXMLである場合は、nvarcharをXML列に変更します。私はこれがあなたのパフォーマンスに顕著な影響を及ぼさないことは比較的確信していますが、それは次のステップのための基礎です。

  2. XMLインデックスを実装します。 Books Onlineの詳細を確認してください

  3. 質問する属性が固定されている場合は、固定テーブル形式に分割してください。 SQL ServerはSQLを優先します。 XMLとXQueryは、アドホックな調査や変形作業に使用する必要があります。

+0

こんにちは、あなたの返事のためのThnaks。私のデータはxmlに基づいていません。私は1対多の関係を持っており、詳細テーブルから1列にデータを取得したいのですが、XMLを使用している理由です。元のテーブルにはXML列がありません。上記のように、コースと料金の列はnvarcharデータ型の詳細テーブルからのものです。私は親テーブルをベースにしたxml formateの詳細テーブルからすべての属性を取得したビューを作成しました(1対多) – user999896

関連する問題