利用reverse索引優(yōu)化like語(yǔ)句的方法詳解
前言
在有一些情況下,開(kāi)發(fā)同學(xué)經(jīng)常使用like去實(shí)現(xiàn)一些業(yè)務(wù)需求,當(dāng)使用like時(shí),我們都知道使用like 前%(like ‘%111')這種情況是無(wú)法使用索引的,那么如何優(yōu)化此類的SQL呢,下面是一個(gè)案例。
原SQL如下:
pcc_cust_infonew 表索引如下
執(zhí)行設(shè)計(jì)如下:
這里可以看到SQL執(zhí)行3.96秒,執(zhí)行計(jì)劃中也可以發(fā)現(xiàn)PCC_CUST_INFONEW表走TABLE ACCESS FULL掃描,返回約380k的數(shù)據(jù),然后再與PCC_CUST_CONTRACTCOMPANY表主鍵PK_PCC_CUST_CONTRACTCOMPANY走INDEX UNIQUE SCAN,這里慢主要是執(zhí)行計(jì)劃中為3的這一步。
我們也都知道在Oracle中,當(dāng)使用like時(shí),如果是后%(like ‘138%')是可以使用索引的,如果是前%(like ‘%138')是無(wú)法正常使用索引。那么如何讓前%也可以使用到索引呢,答案是可以使用reverse索引的形式進(jìn)行優(yōu)化。
優(yōu)化如下:
修改索引
將SQL調(diào)整為
按以上調(diào)整后,SQL執(zhí)行效率提升到毫秒級(jí)。
調(diào)整后的執(zhí)行計(jì)劃如下:
那使用reverse函數(shù)索引后,到底是如何做到可以使用索引了呢,當(dāng)你看到執(zhí)行計(jì)劃下面的謂詞信息想必你就知道答案了,
其實(shí)就是使用reverse函數(shù)索引將索引數(shù)據(jù)反轉(zhuǎn),SQL中的where條件中將值反轉(zhuǎn),這樣就將前%改為后%。
總結(jié)
以上就是關(guān)于使用reverse索引優(yōu)化like語(yǔ)句的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
[數(shù)據(jù)庫(kù)] 通用分頁(yè)存儲(chǔ)過(guò)程
[數(shù)據(jù)庫(kù)] 通用分頁(yè)存儲(chǔ)過(guò)程...2007-02-022024 Navicat Premium最新版簡(jiǎn)體中文版激活永久圖文詳細(xì)教程(親測(cè)可用)
這篇文章主要介紹了2024 Navicat Premium最新版簡(jiǎn)體中文版激活永久圖文詳細(xì)教程,文章通過(guò)圖文結(jié)合的方式給大家講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-09-09Hadoop 2.x偽分布式環(huán)境搭建詳細(xì)步驟
這篇文章主要為大家詳細(xì)介紹了Hadoop 2.x偽分布式環(huán)境搭建詳細(xì)步驟,感興趣的朋友可以參考一下2016-05-05數(shù)據(jù)庫(kù) SQL千萬(wàn)級(jí)數(shù)據(jù)規(guī)模處理概要
我在前年遇到過(guò)過(guò)億條的數(shù)據(jù)。以至于一個(gè)處理過(guò)程要幾個(gè)小時(shí)的。后面慢慢優(yōu)化,查找一些經(jīng)驗(yàn)文章。才學(xué)到了一些基本方法。綜合敘之,與君探討之。2009-07-07利用reverse索引優(yōu)化like語(yǔ)句的方法詳解
這篇文章主要介紹了關(guān)于利用reverse索引優(yōu)化like語(yǔ)句的方法,文中通過(guò)圖文介紹的很詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-03-03數(shù)據(jù)庫(kù)建表設(shè)計(jì)六范式介紹
大家好,本篇文章主要講的是數(shù)據(jù)庫(kù)建表設(shè)計(jì)六范式介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12