2011-12-20 6 views
0

示すクエリは、XMLから名前、単語や簡単なを検索するために使用されているデータベースのXML列のXQuery - 表にXML列内を検索すること

でキーワードを検索するために使用されている次のクエリを見つけてください。 SQL Serverの列。使用しているCMSはUmbracoです。

クエリは、データが限定されたときに最初に設計されました。

今、データベースは、データをフェッチすることができませんでしたレコードの数百万人とクエリ時間を持っています。 クエリは、名前のフィールドデータ検索結果が返された場合CASE 1は、検索データに応じて、他の 返され、検索結果がで助けてください

 SELECT Name,word,brief,    */Selecting Values */ 
    CASE 
     WHEN Name like '%' THEN 1  */Prioritizing Order in which data to be seen */ 
    WHEN word like '%' THEN 2 
    WHEN brief like '%' THEN 3 
    END AS Search 
    from 
     (select         
      A.xml.value('(//@node)[1]','nvarchar(20)') as Name, /* XQuery */  
      A.xml.value('(//word)[1]','nvarchar(225)') as word, 
      A.xml.value('(//brief)[1]','nvarchar(max)')as brief 
    from 
     (Select Convert(xml, xml) AS XML 
      from [dbo].[cmsContentXml]) AS B 
      Cross Apply xml.nodes('//items/item') AS A(xml)) D 
     where ((Name like '%')         /*Condition */ 
       OR(word like '%') 
       OR(brief like '%')) 
      group by word,Name,brief 
     order by 3 ASC 

を返され として検索される順序を優先しこのクエリを最適化または再作成してxml列のデータを検索するソリューションです。また、列からデータを取得することは別です。フロントエンドで検索ボタンをクリック操作は、データベースからすべてのアイテムを取得するために持っている任意のキーワードを入力せずにクリックされた

。事前

+0

あなたのXMLがどのように見えるかを教えてください! –

+0

私が参照している場所からデータベースにアクセスできません。参照するxml列は、Umbraco CMSがデフォルトで作成したものです。CMS "cmscontentxml"はテーブル名です。 – Gallop

+0

XMLドキュメントがないと、最適化するものはありません。この質問を意味のあるものにするために、XML文書(典型的な例)を提供してください。 –

答えて

0

まずにおける

おかげで、無キーワードで検索を許可する代わりに、閲覧機構にユーザーに指示していません。検索するものがない場合は、検索クエリのオーバーヘッドが発生することはありません。

第2に、Convert(xml、xml)は不要なオーバーヘッドです。xmlが格納されている場合、データベース列はxmlである必要があります。 xml型の列を持つことで、xmlインデックスを置くことができます。これにより、高速化に役立ちます。 XMLインデックスの詳細については、http://msdn.microsoft.com/en-us/library/ms191497.aspxを参照してください。また、変換がなければ、それをサブクエリとして保持する必要はありません。

第3に、ORDER BY 3構文を使用しないで、列名を使用します。 ORDER BY 3はANSI標準ではなく、保守性の問題を引き起こす可能性もあります。

第四に、あなたのXMLサンプルデータが無効なXML(簡単のために閉じられていないデータ・タグ、IDの無い閉鎖要素、ブロックの無い開放要素)であるように思われます。実際のデータベースのように実際に破損している場合は、データをチェックしてください。悪いxmlがノード検索を遅くするので、修正する必要があります。

第5に、単一文字のエイリアスを避けてください。これは保守性の問題のもう1つです。

関連する問題