[點(diǎn)晴永久免費(fèi)OA]創(chuàng)建了索引的字段如何在索引不失效的情況下實(shí)現(xiàn)模糊查找
有時(shí)候我們使用模糊查詢(like)的時(shí)候,會(huì)出現(xiàn)索引失效的情況,比如根據(jù)手機(jī)號(hào)碼后四位模糊匹配查詢。 在SQL中模糊查詢:mobile like ‘%8765’,這種情況是不能使用 mobile 上的索引的,那么如果需要根據(jù)手機(jī)號(hào)碼后四位進(jìn)行模糊查詢,可以用一下方法進(jìn)行改造。 我們可以加入冗余列,比如 mobile_reverse,內(nèi)部存儲(chǔ)為 mobile 的倒敘文本,如 mobile 17312345678(手機(jī)號(hào)碼為虛構(gòu)),那么 mobile_reverse 存儲(chǔ) 87654321371,為 mobile_reverse 列建立索引,查詢中使用語(yǔ)句 mobile_reverse like reverse(’%5678’) 即可。 reverse 是 SQL 中的反轉(zhuǎn)函數(shù),這條語(yǔ)句相當(dāng)于 mobile_reverse like ‘8765%’ ,這種語(yǔ)句是可以使用索引的。 mobile_reverse 的更新可以用觸發(fā)器解決,為表新建 ’新增‘和’更新‘的觸發(fā)器,寫入以下文本即可。 set new.mobile_reverse = REVERSE(new.mobile); 未改造前模糊查詢語(yǔ)句為: select * from xxx where mobile like ''%5678''; 改造后查詢語(yǔ)句為: select * from xxx where mobile_reverse like reverse(''%5678''); 或者 select * from xxx where mobile_reverse like ''8765%''; 改造后的模糊匹配可以使用 mobile_reverse 字段上的索引,加快查詢速度。
該文章在 2019/8/22 12:35:12 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |