2012-11-14 56 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