2014-10-03 91 views
1

我正在將搜索功能實現到網絡應用程序中,並在我的表格中的許多列上啓用了全文搜索。SQL XML全文搜索

其中一列是數據類型'xml',我目前使用XQuery來確保只搜索某些節點。

這裏是(被一個生成的SQL查詢/動態查詢)的一個SQL查詢的XQuery部分的示例

XMLContent.exist('/Template/Fields/Field/Text/text()[contains(.,"search-phrase1") or contains(.,"search-phrase2") or contains(.,"etc.")]') = 1 

的動態查詢可以把任何數量的搜索短語在向查詢。

當我正在學習如何編寫此查詢時,我得到了這樣的印象:這是利用全文搜索,但我試圖刪除XMLContent列上的全文索引,查詢仍在運行。

我的問題是,如果在sql中使用CONTAINS-function搜索整個XMLContent-column的速度更快,或者當我將其縮小到xml中的特定節點時速度會更快?

除了CONTAINS檢查所有節點而不是指定的節點之外,不同的方法是否有各自的優點?

回答

1

它們是2種不同的包含功能。他們不相互交談。

  1. 全文包含:包含(XmlContent, '福特')
  2. XML包含:XmlContent.exist( '/汽車/文本()[含有( 「福特」)]')= 1

我有10000行的表,在以下3個SSMS查詢與運行包括實際的執行計劃

Select * from TableA where Contains(XmlContent,'Ford') and XmlContent.exist('/Cars/text()[contains(.,"Ford")]') =1 
Select * from TableA where Contains(XmlContent,'Ford') 
Select * from TableA where XmlContent.exist('/Cars/text()[contains(.,"Ford")]') =1 

執行規劃顯示

Query1: Query Cost (relative to the batch): 3% 
Query2: Query Cost (relative to the batch): 2% 
Query3: Query Cost (relative to the batch): 95% 

全文包含()排除不相關的行非常快,很少費力。強烈推薦。你可以使用contains()的兩個版本。

不確定特定節點縮小範圍,你可以在SSMS中編寫類似的查詢,它會告訴你它是否工作。

這是MSDN頁面