我對上的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