最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

oracle數(shù)據(jù)庫(kù)索引失效的問(wèn)題及解決

 更新時(shí)間:2025年01月09日 10:07:23   作者:喜羊羊love紅太狼  
本文總結(jié)了在Oracle數(shù)據(jù)庫(kù)中索引失效的一些常見(jiàn)場(chǎng)景,包括使用isnull、isnotnull、!=、<、>、函數(shù)處理、like前置%查詢以及范圍索引和等值索引同時(shí)存在等情況,通過(guò)實(shí)際的SQL查詢驗(yàn)證,展示了索引失效的原因,并給出了相應(yīng)的優(yōu)化建議

oracle數(shù)據(jù)庫(kù)索引失效問(wèn)題

場(chǎng)景

在開發(fā)中有時(shí)候遇到某個(gè)表中的列明明是創(chuàng)建了索引,但查詢時(shí)卻發(fā)現(xiàn)索引失效。

環(huán)境

下面是工作流activiti中的兩張表act_hi_procinst、act_hi_taskinst關(guān)系是一對(duì)多(一個(gè)流程包含多個(gè)流程環(huán)節(jié)),一個(gè)是歷史流程表,一個(gè)是歷史流程環(huán)節(jié)表。

索引失效情況及驗(yàn)證

(單表act_hi_procinst已經(jīng)在delete_reason_列上創(chuàng)建了索引 )

驗(yàn)證一:索引列為is null 和 is not null時(shí),索引失效

select * from act_hi_procinst t where t.delete_reason_ is not null;
select * from act_hi_procinst t where t.delete_reason_ is null;

全表掃描,該列索引失效

select * from act_hi_procinst t where t.delete_reason_ ='ACTIVITI_DELETED' and rownum < 1000;

索引生效,Oracle 數(shù)據(jù)庫(kù)使用索引范圍掃描方式。

這種掃描方式通過(guò)索引鍵值的范圍來(lái)定位需要的數(shù)據(jù)。

select * from act_hi_procinst t where t.delete_reason_ is not null
and t.start_time_ between TO_DATE('2023-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
and TO_DATE('2023-12-31 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
and rownum < 1000

結(jié)論一

經(jīng)驗(yàn)證索引列查詢使用is null 和 is not null則該列索引失效。

驗(yàn)證二:索引列為 !=和 <> 時(shí)會(huì)導(dǎo)致該索引列失效

select * from act_hi_procinst t where t.delete_reason_ !='ACTIVITI_DELETED';
select * from act_hi_procinst t where t.delete_reason_ <>'ACTIVITI_DELETED';

結(jié)論二

經(jīng)驗(yàn)證索引列查詢使用 !=和 <> 時(shí)會(huì)導(dǎo)致該索引列失效

驗(yàn)證三:索引列用函數(shù)處理則該索引會(huì)失效

select * from act_hi_procinst t where to_char(start_time_,'YYYY')= '2023'

結(jié)論三

索引列用函數(shù)處理則該索引會(huì)失效,如字符串函數(shù)trunc,to_char,substring,to_date等函數(shù)

區(qū)別下面的sql(下面的sql走索引)

select * from act_hi_procinst t where t.start_time_ >= TO_DATE('2023-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS');

驗(yàn)證四:索引列使用like的前置%查詢,則該索引列失效。

select * from act_hi_procinst t where t.business_key_ like '%20230103-0000102'

like 使用后置百分號(hào)走索引

結(jié)論四

經(jīng)驗(yàn)證索引列使用like的前置%查詢時(shí)會(huì)導(dǎo)致該索引列失效,但是使用了ike的后置%則會(huì)走索引

驗(yàn)證五:范圍索引查詢和等值索引查詢同時(shí)存在,則范圍索引失效

其中start_time_創(chuàng)建有普通索引,delete_reason_字段也創(chuàng)建了普通索引

  • SQL一:
select * from act_hi_procinst t where t.start_time_
between TO_DATE('2023-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
and TO_DATE('2023-12-31 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
and t.delete_reason_ ='ACTIVITI_DELETED'
and rownum < 1000;
  • SQL二:
select * from act_hi_procinst t
where t.start_time_ >= TO_DATE('2023-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
and t.start_time_<= TO_DATE('2023-12-31 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
and t.delete_reason_ ='ACTIVITI_DELETED'
and rownum < 1000

結(jié)論五

范圍索引查詢和等值索引查詢同時(shí)存在,則范圍索引失效

注:上面的查詢sql中加 rownum < 1000的目的主要是數(shù)據(jù)量太大,這里只是要驗(yàn)證一下查詢是否走索引列

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Oracle中行列轉(zhuǎn)換的實(shí)現(xiàn)方法匯總

    Oracle中行列轉(zhuǎn)換的實(shí)現(xiàn)方法匯總

    行列轉(zhuǎn)換是指將行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù),或?qū)⒘袛?shù)據(jù)轉(zhuǎn)換為行數(shù)據(jù)的過(guò)程,本文主要介紹了Oracle中行列轉(zhuǎn)換的實(shí)現(xiàn)方法匯總,用PIVOT和UNPIVOT函數(shù)來(lái)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • 如何利用Oracle命令解決函數(shù)運(yùn)行錯(cuò)誤

    如何利用Oracle命令解決函數(shù)運(yùn)行錯(cuò)誤

    這篇文章主要給大家介紹了關(guān)于如何利用Oracle命令解決函數(shù)運(yùn)行錯(cuò)誤的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Oracle具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • oracle 日期操作語(yǔ)句總結(jié)

    oracle 日期操作語(yǔ)句總結(jié)

    這篇文章主要介紹了一些oracle的日期操作語(yǔ)句,幫助大家更好的學(xué)習(xí)和理解oracle,感興趣的朋友可以了解下
    2020-08-08
  • oracle中動(dòng)態(tài)SQL使用詳細(xì)介紹

    oracle中動(dòng)態(tài)SQL使用詳細(xì)介紹

    Oracle編譯PL/SQL程序塊分為兩個(gè)種:通常靜態(tài)SQL采用前一種編譯方式,而動(dòng)態(tài)SQL采用后一種編譯方式,需要了解的朋友可以參考下
    2012-11-11
  • Oracle Form中COMMIT的概述及使用技巧

    Oracle Form中COMMIT的概述及使用技巧

    針對(duì)form上面的數(shù)據(jù)變動(dòng)提交到后臺(tái)數(shù)據(jù)庫(kù),同時(shí)數(shù)據(jù)庫(kù)提交數(shù)據(jù),接下來(lái)將詳細(xì)介紹下Form中COMMIT的使用,感興趣的你可以參考下本文
    2013-03-03
  • Oracle數(shù)據(jù)安全面面觀

    Oracle數(shù)據(jù)安全面面觀

    Oracle數(shù)據(jù)安全面面觀...
    2007-03-03
  • Oracle創(chuàng)建新undo表空間最佳實(shí)踐(包含段檢查)

    Oracle創(chuàng)建新undo表空間最佳實(shí)踐(包含段檢查)

    這篇文章主要介紹了Oracle創(chuàng)建新undo表空間最佳實(shí)踐(包含段檢查),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • oracle中使用group by優(yōu)化distinct

    oracle中使用group by優(yōu)化distinct

    這篇文章主要介紹了oracle中使用group by優(yōu)化distinct的相關(guān)資料,需要的朋友可以參考下
    2015-11-11
  • oracle邏輯結(jié)構(gòu)分析

    oracle邏輯結(jié)構(gòu)分析

    這篇文章主要介紹了oracle邏輯結(jié)構(gòu)分析,邏輯清楚,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-09-09
  • ORA-00947:Not enough values (沒(méi)有足夠的值)的深入分析

    ORA-00947:Not enough values (沒(méi)有足夠的值)的深入分析

    本篇文章是對(duì)ORA-00947:Not enough values (沒(méi)有足夠的值)的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論

万源市| 宁晋县| 乌兰浩特市| 塔河县| 卓尼县| 靖安县| 巴林右旗| 大城县| 吉首市| 蒙自县| 北宁市| 会昌县| 新野县| 湟源县| 枞阳县| 铜山县| 武强县| 那曲县| 黔南| 湟中县| 江津市| 宁德市| 汝城县| 星子县| 连山| 阿瓦提县| 湄潭县| 台安县| 丹寨县| 三门峡市| 呼伦贝尔市| 同仁县| 天台县| 互助| 北海市| 涞源县| 上犹县| 西吉县| 寻乌县| 德保县| 旬阳县|