我处于需要进行通配符搜索的情况。全文索引没有帮助,因为人们正在搜索单词的一部分,我无法从搜索开始剥离%以加快它,因为他们可能正在搜索中间部分。
需要搜索两个字段,并且应返回其中一个匹配项。如果我只搜索一个字段,那么它很快(行数不多)但是一旦我搜索它们就会很慢。
我不会详细说明,但是当我有
时,我会提出一个想法... 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%')
答案 0 :(得分:1)
如果只有第二个条件的查询(T2.Field1 LIKE'%search')也快速返回,您可以尝试使用UNION:
(SELECT ... AND (T1.Field1 LIKE '%search%'))
UNION
(SELECT ... AND (T2.Field1 LIKE '%search'))
答案 1 :(得分:0)
LIKE '%search%'
无法扩展,需要进行全表扫描,因此随着表的增长,搜索速度会变慢。如果列中存在索引,LIKE 'search%'
将使用索引,并且速度会快得多。