-1

我处于需要进行通配符搜索的情况。全文索引没有帮助,因为人们正在搜索单词的一部分,我无法从搜索开始时去掉 % 以加快速度,因为他们可能正在搜索中间部分。

有两个字段需要搜索,并且应该返回其中任何一个的匹配项。如果我只搜索一个字段,它会非常快(没有很多行),但是一旦我在两个字段中搜索,它就真的很慢。

我不会详细介绍,但给出一个想法,当我有

... AND (T1.Field1 LIKE '%search%')

或者

... AND (T2.Field1 LIKE '%search%')

耗时 0.0695 秒

但是当我这样做时

... AND (T1.Field1 LIKE '%search%' OR T2.Field1 LIKE '%search%')

需要 35 秒

我该如何优化它,为什么 OR 会增加这么多搜索时间?

根据要求,整个未经编辑的查询:

SELECT CDR.Status AS CDRStatus, D.VendorID, D.RevisionOfID, D.Revision, D.DocumentID, D.Title, D.OriginalFilename 
FROM Documents AS D
LEFT JOIN CompanyDocumentReviews AS CDR ON CDR.DocumentID = D.DocumentID
LEFT JOIN Vendors AS V ON V.VendorID = D.VendorID
LEFT JOIN VendorAliases AS VA ON VA.Vendor1ID = V.VendorID AND VA.Vendor2ID != V.VendorID
LEFT JOIN Vendors AS V2 ON V2.VendorID = VA.Vendor2ID
WHERE D.Status != 'Deleted' AND (V1.VendorName LIKE '%search%' OR V2.VendorName LIKE '%search%')
4

2 回答 2

1

如果仅包含第二个条件 (T2.Field1 LIKE '%search') 的查询也快速返回,您可以尝试使用 UNION:

(SELECT ... AND (T1.Field1 LIKE '%search%'))
UNION
(SELECT ... AND (T2.Field1 LIKE '%search'))
于 2013-06-03T22:52:10.140 回答
0

LIKE '%search%'无法扩展,它将需要全表扫描,因此随着表的增长,搜索会变慢。LIKE 'search%'如果列上存在索引,将使用索引,并且会更快。

于 2013-06-03T23:05:09.140 回答