1. like %keyword? ? 索引失效,使用全表掃描日裙。但可以通過翻轉(zhuǎn)函數(shù)+like前模糊查詢+建立翻轉(zhuǎn)函數(shù)索引=走翻轉(zhuǎn)函數(shù)索引昂拂,不走全表掃描格侯。
2. like keyword%??? 索引有效。
3. like %keyword% 索引失效撑碴,也無法使用反向索引醉拓。
====================================================================
1. 使用下面的函數(shù)來進(jìn)行模糊查詢廉嚼,如果出現(xiàn)的位置〉0,表示包含該字符串杜跷。
查詢效率比like要高葛闷。
如果: table.field like? ‘%AAA%’ 可以改為 locate (‘AAA’ , table.field) > 0
LOCATE(substr,str)
POSITION(substr IN str)
返回子串substr在字符串str第一個(gè)出現(xiàn)的位置淑趾,如果substr不是在str里面,返回0延蟹。
使用instr
select count(*) from table t where instr(t.column,’xx’)> 0
這種查詢效果很好阱飘,速度很快沥匈。
2. 查詢%xx的記錄
select?count(c.c_ply_no)?as?COUNT
from?Policy_Data_All?c,?Item_Data_All?i
where?c.c_ply_no?=?i.c_ply_no
and?i.C_LCN_NO?like?’%245’
在執(zhí)行的時(shí)候高帖,執(zhí)行計(jì)劃顯示返弹,消耗值义起,io值默终,cpu值均非常大,原因是like后面前模糊查詢導(dǎo)致索引失效含滴,進(jìn)行全表掃描
解決方法:這種只有前模糊的sql可以改造如下寫法
select?count(c.c_ply_no)?as?COUNT
from?Policy_Data_All?c,?Item_Data_All?i
where?c.c_ply_no?=?i.c_ply_no
andreverse(i.C_LCN_NO)likereverse(‘%245’)