【发布时间】:2013-06-03 22:26:21
【问题描述】:
我处于需要进行通配符搜索的情况。全文索引无济于事,因为人们正在搜索单词的一部分,我无法从搜索开始时去掉 % 以加快搜索速度,因为他们可能正在搜索中间部分。
有两个字段需要被搜索,并且应该返回其中任何一个的匹配项。如果我只搜索一个字段,它会非常快(没有很多行),但是当我同时搜索两个字段时,它真的很慢。
我不会详细介绍,但我会给出一个想法,当我有的时候
... 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%')
【问题讨论】:
-
请显示整个查询(至少 FROM 之后的部分)
-
你是如何加入 T1 和 T2 的
-
在 OP 中添加了整个查询
标签: mysql optimization wildcard