现在要优化下 下面SQL, 索引介绍如下, 我把 OR 转换成 UNION ALL 效率还不如不转换,在不修改业务的基础上怎么优化?
FCB(SID 是主键)
IIM(ItID,IType 是主键)
IEL(建立了 EId IType 组合非聚集索引)
SELECT TOP 10 fb.SId
FROM FCB fb
LEFT JOIN IIM mp ON fb.SID = mp.ItID AND mp.IType =0
LEFT JOIN IIM imp ON fb.SID = imp.ItID AND imp.IType =1
LEFT JOIN IEL tk ON fb.SID = tk.ItID and tk.IType =10 AND tk.EId = 'EXAS'
LEFT JOIN IEL tkr ON fb.SID = tkr.ItID AND tkr.IType =10 AND tkr.EId != 'EXAS'
WHERE (
fb.SID LIKE '%cc%'
OR fb.Name LIKE '%cc%'
OR tk.ListingId LIKE '%cc%'
OR tkr.ListingId LIKE '%cc%'
OR mp.Id LIKE '%cc%'
OR imp.Id LIKE '%cc%'
)
------解决方案--------------------
那么多or、like '%%',又不能改业务逻辑,改全文索引算了
------解决方案--------------------
不妨在这些条件的表上,增加计算列,包含 cc 得 1 ,不包含得 0 ,
查询的时候,直接 where xx = 1 or yy = 1