數據庫-Oracle通過執行計划查看查詢語句是否使用索引【轉】


1.生成執行計划

explain plan for
select * from t_call_records where t_bjhm='123456'
  備注:explain plan for后面為要生成執行計划的查詢語句

2.查看執行計划結果

select * from table(dbms_xplan.display)

  如上圖所示,TABLE ACCESS FULL為全表掃描;

  為t_bjhm列加上索引后生成執行計划並查看結果:

  

  如上圖所示,index range scan為索引范圍掃描;

幾種常見的索引類型掃描:

第一種:index unique  scan

    索引唯一掃描,當可以優化器發現某個查詢條件可以利用到主鍵、唯一鍵、具有外鍵約束的列,或者只是訪問其中某行索引所在的數據的時候,優化器會選擇這種掃描類型。

第二種:index range scan

    索引范圍掃描,當優化器發現在UNIQUE列上使用了大於、小於、大於等於、小於等於以及BETWEEN等就會使用范圍掃描,在組合列上只使用部分進行查詢,導致查詢出多行數據。對非唯一的索引列上進行任何活動都會使用index range scan。

第三種:index full scan

    全索引掃描,如果要查詢的數據可以全部從索引中獲取,則使用全索引掃描。

第四種:index fast full scan

    索引快速掃描,掃描索引中的全部的數據塊,與全索引掃描的方式基本上類似。兩者之間的明顯的區別是,索引快速掃描對查詢的數據不進行排序,數據返回的時候不是排序的。“在這種存取方法中,可以使用多塊讀功能,也可以使用並行讀入,從而得到最大的吞吐量和縮短執行時間”。

order by、group by使用索引的前提條件:

1.order by、group by中所有的列必須包含在相同的索引中並保持在索引中的排列順序;

2.order by、group by中所有的列必須定義為非空

不走索引的幾種情況:

1.where子句中使用 is null 和 is not null

2.where子句中使用函數

3.使用like ‘%T’ 進行模糊查詢

4.where子句中使用不等於操作(包括:<>, !=, not colum >= ?, not colum <= ? ,可以使用or代替)

5.比較不匹配數據類型,例如:select * from tablewhere jlbh = 1;jlbh為varchar2類型字段
————————————————
原文鏈接:https://blog.csdn.net/rexueqingchun/article/details/84563686


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM