Tôi có một danh mục văn bản miễn phí trên một bảng đơn giản trên SQL Server 2008R2:Kết hợp tìm kiếm văn bản miễn phí với điều kiện khác là chậm
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;
Nếu tôi thực hiện ba truy vấn sau đây hai trở lại đầu tiên gần như ngay lập tức, trong khi người cuối cùng mất ~ 14 giây trên một bảng với 100.000 hồ sơ:
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;
Sau đây là các queryplans:
Tại sao truy vấn thứ ba chậm hơn nhiều? Tôi có thể làm bất cứ điều gì để cải thiện nó hay tôi cần phải phân chia truy vấn?
Thường viết lại các truy vấn 'CONTAINS' vào' CONTAINSTABLE' sắp xếp loại vấn đề này. [Ví dụ như trong câu trả lời này] (http://stackoverflow.com/questions/2906812/adding-more-or-searches-with-contains-brings-query-to-crawl/2907331#2907331) –
Tùy thuộc vào 2008R2 SP của bạn phiên bản, sự cố của bạn có thể liên quan đến vấn đề MS Connect sau đây: http://connect.microsoft.com/SQLServer/feedback/details/520653/full-text-performance-with-mixed-queries – MicSim
@MicSim: Nếu bạn thực hiện điều đó vào một câu trả lời, tôi sẽ chấp nhận nó. Trong khi các câu trả lời khác đã cung cấp cách giải quyết tốt đẹp, bạn trông giống như câu trả lời thực sự. Cảm ơn! –