Tôi đã thử một giải pháp khả thi. Trước khi giải pháp này thậm chí truy vấn không trả về kết quả và gây ra lỗi kết nối thời gian chờ.
Truy vấn của tôi đã có bộ lọc ngày và các tiêu chí khác.Tất cả các tiêu chí khác giống như tìm kiếm. Một từ khóa cột đã được tìm kiếm như '% abc%' trên cột ntext và nó đang thực hiện quét toàn bộ bảng.
Giải pháp:
Chia truy vấn trong 2 phần. 1) Phần đầu tiên trong CTE (Common Table Express) 2) Áp dụng tất cả các tiêu chí tìm kiếm trên CTE.
WITH SearchData(Column1,Column2,Column3,Column4,........)
AS
(
SELECT Column1,Column2,Column3,Column4,...........
FROM myTable1 WITH(NOLOCK)
INNER JOIN MyTable2 WITH(NOLOCK)
ON MyTable1.id = MyTable2.Id
WHERE (MyTable1.CreationTime >= '2014-04-27' AND MyTable1.CreationTime <= '2014-05-01')
)
SELECT DISTINCT top 250 Column1,Column2,Column3,Column4
FROM SearchData
WHERE (ISNULL(Column1,'') LIKE @Column1 +'%' OR @Column1 IS NULL)
and (Column2 LIKE @Column2+ '%' OR @Column2 IS NULL)
...
...
...
...
AND (Column10 like '%'[email protected]+'%' or @Column10 IS NULL)
AND @[email protected][email protected][email protected] <> ''
ORDER BY [CreationTime] DESC
Nó làm việc cho tôi.
bạn có thể sử dụng một chỉ mục, với một công việc nhỏ, khi làm LIKE '%' + chuỗi, xem liên kết trong bình luận khác của tôi. –
@KM: Thủ thuật thú vị, cột đảo ngược. Cũng tương tự tốt với cuốn sách điện thoại, làm cho các trường hợp rõ ràng rõ ràng. –
mẹo nhỏ, để che giấu không có bất cứ điều gì tương tự cho vấn đề '% text%' như thế. – HLGEM