我对上的SQL Server 2008R2一个简单的表自由文本目录:结合自由文本搜索与另一个条件是
CREATE FULLTEXT CATALOG customer_catalog;
CREATE FULLTEXT INDEX ON customer
(
name1
)
KEY INDEX customer_pk
ON customer_catalog;
ALTER FULLTEXT INDEX ON customer START UPDATE POPULATION;
如果我几乎立即执行以下三个查询的前两回,而最后一个需要14秒左右在桌子上有100,000个记录:
SELECT
customer_id
FROM
customer
WHERE
CONTAINS(customer.*, 'nomatch');
SELECT
customer_id
FROM
customer
WHERE
customer.customer_id = 0;
SELECT
customer_id
FROM
customer
WHERE
CONTAINS(customer.*, 'nomatch')
OR customer.customer_id = 0;
这里是queryplans:
为什么第三个查询慢得多?我可以做任何事情来改善它,或者我需要拆分查询吗?
通常,将'CONTAINS'查询重写为'CONTAINSTABLE'会将此类问题排序。 [例如在这个答案](http://stackoverflow.com/questions/2906812/adding-more-or-searches-with-contains-brings-query-to-crawl/2907331#2907331) – 2013-05-11 22:09:58
根据你的2008R2 SP版本,您的问题可能与下面的MS Connect问题有关:http://connect.microsoft.com/SQLServer/feedback/details/520653/full-text-performance-with-mixed-queries – MicSim 2013-05-17 14:16:13
@MicSim:如果您使成为答案,我会接受它。虽然其他答案提供了很好的解决方法,但您的看起来像是真正的答案。谢谢! – 2013-05-17 17:36:21