利用reverse索引優(yōu)化like語句的方法詳解
前言
在有一些情況下,開發(fā)同學(xué)經(jīng)常使用like去實(shí)現(xiàn)一些業(yè)務(wù)需求,當(dāng)使用like時,我們都知道使用like 前%(like ‘%111')這種情況是無法使用索引的,那么如何優(yōu)化此類的SQL呢,下面是一個案例。
原SQL如下:

pcc_cust_infonew 表索引如下

執(zhí)行設(shè)計如下:

這里可以看到SQL執(zhí)行3.96秒,執(zhí)行計劃中也可以發(fā)現(xiàn)PCC_CUST_INFONEW表走TABLE ACCESS FULL掃描,返回約380k的數(shù)據(jù),然后再與PCC_CUST_CONTRACTCOMPANY表主鍵PK_PCC_CUST_CONTRACTCOMPANY走INDEX UNIQUE SCAN,這里慢主要是執(zhí)行計劃中為3的這一步。
我們也都知道在Oracle中,當(dāng)使用like時,如果是后%(like ‘138%')是可以使用索引的,如果是前%(like ‘%138')是無法正常使用索引。那么如何讓前%也可以使用到索引呢,答案是可以使用reverse索引的形式進(jìn)行優(yōu)化。
優(yōu)化如下:
修改索引

將SQL調(diào)整為

按以上調(diào)整后,SQL執(zhí)行效率提升到毫秒級。

調(diào)整后的執(zhí)行計劃如下:

那使用reverse函數(shù)索引后,到底是如何做到可以使用索引了呢,當(dāng)你看到執(zhí)行計劃下面的謂詞信息想必你就知道答案了,

其實(shí)就是使用reverse函數(shù)索引將索引數(shù)據(jù)反轉(zhuǎn),SQL中的where條件中將值反轉(zhuǎn),這樣就將前%改為后%。
總結(jié)
以上就是關(guān)于使用reverse索引優(yōu)化like語句的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
相關(guān)文章
SQLite數(shù)據(jù)庫中如何獲取新插入數(shù)據(jù)的自增長ID
SQLite數(shù)據(jù)庫中有一有列名為ID的自增列,項目需求要在向數(shù)據(jù)庫在插入新數(shù)據(jù)的同時返回新插入數(shù)據(jù)行的ID,這篇文章主要介紹了SQLite數(shù)據(jù)庫中如何獲取新插入數(shù)據(jù)的自增長ID,需要的朋友可以參考下2024-04-04
數(shù)據(jù)庫設(shè)計的完整性約束表現(xiàn)在哪些方面
數(shù)據(jù)完整性是指數(shù)據(jù)的正確性、完備性和一致性,是衡量數(shù)據(jù)庫質(zhì)量好壞的規(guī)范。數(shù)據(jù)庫完整性由各式各樣的完整性約束來確保,因而可以說數(shù)據(jù)庫完整性規(guī)劃即是數(shù)據(jù)庫完整性約束的規(guī)劃。那么,數(shù)據(jù)庫設(shè)計的完整性約束表現(xiàn)哪些方面?2015-10-10

