Oracle如何通過執(zhí)行計劃查看查詢語句是否使用索引
1.生成執(zhí)行計劃
explain plan for select * from t_call_records where t_bjhm='123456'
備注:
explain plan for后面為要生成執(zhí)行計劃的查詢語句
2.查看執(zhí)行計劃結果
select * from table(dbms_xplan.display)
如上圖所示:
TABLE ACCESS FULL為全表掃描;
為t_bjhm列加上索引后生成執(zhí)行計劃并查看結果:
如上圖所示:
index range scan為索引范圍掃描;
幾種常見的索引類型掃描
- 第一種:index unique scan
索引唯一掃描,當可以優(yōu)化器發(fā)現(xiàn)某個查詢條件可以利用到主鍵、唯一鍵、具有外鍵約束的列,或者只是訪問其中某行索引所在的數(shù)據(jù)的時候,優(yōu)化器會選擇這種掃描類型。
- 第二種:index range scan
索引范圍掃描,當優(yōu)化器發(fā)現(xiàn)在UNIQUE列上使用了大于、小于、大于等于、小于等于以及BETWEEN等就會使用范圍掃描,在組合列上只使用部分進行查詢,導致查詢出多行數(shù)據(jù)。
對非唯一的索引列上進行任何活動都會使用index range scan。
- 第三種:index full scan
全索引掃描,如果要查詢的數(shù)據(jù)可以全部從索引中獲取,則使用全索引掃描。
- 第四種:index fast full scan
索引快速掃描,掃描索引中的全部的數(shù)據(jù)塊,與全索引掃描的方式基本上類似。
兩者之間的明顯的區(qū)別是,索引快速掃描對查詢的數(shù)據(jù)不進行排序,數(shù)據(jù)返回的時候不是排序的。
“在這種存取方法中,可以使用多塊讀功能,也可以使用并行讀入,從而得到最大的吞吐量和縮短執(zhí)行時間”。
order by、group by使用索引的前提條件
1.order by、group by中所有的列必須包含在相同的索引中并保持在索引中的排列順序;
2.order by、group by中所有的列必須定義為非空
不走索引的幾種情況
1.where子句中使用 is null 和 is not null
2.where子句中使用函數(shù)
3.使用like ‘%T’ 進行模糊查詢
4.where子句中使用不等于操作(包括:<>, !=, not colum >= ?, not colum <= ? ,可以使用or代替)
5.比較不匹配數(shù)據(jù)類型,例如:select * from tablewhere jlbh = 1;jlbh為varchar2類型字段
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
oracle 11g 數(shù)據(jù)庫常用操作實例總結
這篇文章主要介紹了oracle 11g 數(shù)據(jù)庫常用操作,結合實例形式總結分析了oracle 11g數(shù)據(jù)庫進入、創(chuàng)建、權限、用戶等相關操作技巧與注意事項,需要的朋友可以參考下2023-05-05Oracle數(shù)據(jù)庫升級到19C用戶登錄報錯問題解決辦法
oracle是一款非常流行的關系型數(shù)據(jù)庫管理系統(tǒng),被廣泛應用于各個領域,下面這篇文章主要給大家介紹了關于Oracle數(shù)據(jù)庫升級到19C用戶登錄報錯問題的解決辦法,需要的朋友可以參考下2024-08-08