ich einen freien Textkatalog auf einer einfachen Tabelle auf SQL Server 2008R2 haben:Freitextsuche mit einem anderen Zustand zu verbinden, ist langsam
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;
Wenn ich die folgenden drei Abfragen, um die ersten beiden Rück führen fast sofort, während die letzte dauert ~ 14 Sekunden auf einem Tisch mit 100.000 Datensätze:
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;
Hier sind die queryplans:
Warum ist die dritte Abfrage so viel langsamer? Kann ich etwas tun, um es zu verbessern, oder muss ich die Abfrage aufteilen?
Durch das wiederholte Umschreiben von CONTAINS-Abfragen in CONTAINSTABLE wird diese Art von Problem behoben. [ZB wie in dieser Antwort] (http://stackoverflow.com/questions/2906812/adding-more-or-searches-with-contains-brings-query-to-crawl/2907331#2907331) –
Abhängig von Ihrem 2008R2 SP Version, Ihr Problem könnte mit dem folgenden MS Connect Problem zusammenhängen: http://connect.microsoft.com/SQLServer/feedback/details/520653/full-text-performance-with-mixed-queries – MicSim
@MicSim: Wenn Sie das machen in eine Antwort werde ich es akzeptieren. Während die anderen Antworten nette Workarounds geliefert haben, sehen deine aus wie die echte Antwort. Vielen Dank! –