ワイルドカード検索を行う必要がある状況にいます。人々は単語の一部を検索しているため、全文索引は役に立ちません。検索の最初から % を取り除いて高速化することはできません。
検索する必要がある 2 つのフィールドがあり、いずれかで一致するものを返す必要があります。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%')