我处于需要进行通配符搜索的情况。全文索引没有帮助,因为人们正在搜索单词的一部分,我无法从搜索开始时去掉 % 以加快速度,因为他们可能正在搜索中间部分。
有两个字段需要搜索,并且应该返回其中任何一个的匹配项。如果我只搜索一个字段,它会非常快(没有很多行),但是一旦我在两个字段中搜索,它就真的很慢。
我不会详细介绍,但给出一个想法,当我有
... 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%')