2012-11-14 77 views
1

您好我正在使用CONTAINSTABLE在表的一列進行搜索。 問題在於性能。 這是我的查詢:限制一個CONTAINSTABLE搜索,以避免搜索整個表

SELECT count(*) 
FROM dbo.Document d 
INNER JOIN dbo.DocuemntVehicleXRef vx ON (vx.DocuemntID = d.DocumentID) 
INNER JOIN CONTAINSTABLE (Document , QueryContent , @searchterm) ftt ON (d.DocumentID = ftt.[Key]) 
WHERE vx.VehicleId = @vehicleId 

因此,爲了提高性能(因爲文檔表格是巨大的)。我需要做的CONTAINSTABLE函數,而不是所有的dbo.Docuemnt表,只能通過與VehicleId綁定的文檔(因爲其餘搜索是不必要的) 有沒有解決方法或方法來做到這一點? 謝謝

回答

1

一種方法是創建多個索引視圖,每個視圖返回文檔的子集。每個視圖都有自己的ft索引,並且您可以管理查詢邏輯以僅從相關視圖中進行選擇。如果您的表很容易拆分爲常用塊(如層次結構類別結構),則此方法效果良好。

另一種方法是通過附加一個唯一的鍵來「編纂」索引文本。例如「VEHICLEID001」然後您可以搜索「VEHICLEID001」以及其他關鍵字。微軟將這種做法視爲一種反實踐,但這確實奏效。

+0

對這個老問題的復興感到抱歉,但是你有這樣一個反對的來源嗎?我從2007年發現了這篇文章,建議使用嵌入式過濾器:https://technet.microsoft.com/en-gb/library/cc917695.aspx#Embedding_Filter – EventHorizon

+0

https://msdn.microsoft.com/en-us/library/ cc721269.aspx#_Toc202506250在性能改進部分。 「在SQL Server 2000和2005中,對於某些場景(關係基數遠低於全文場景)的有效解決方法是將關係列的內容推送到全文索引中......」 – StrayCatDBA