1、查看執(zhí)行計劃
EXPLAIN PLAN FOR SELECT * FROM temp_1 a ;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
2、執(zhí)行計劃說明
2.1、執(zhí)行順序
根據(jù)縮進(jìn)來判斷,縮進(jìn)最多的最先執(zhí)行;(縮進(jìn)相同時,最上面的最先執(zhí)行)
2.2、常見表訪問方式
2.2.1、TABLE ACCESS FULL(全表掃描)
Oracle會讀取表中所有的行,并檢查每一行是否滿足SQL語句中的 Where 限制條件;
全表掃描時可以使用多塊讀(即一次I/O讀取多塊數(shù)據(jù)塊)操作,提升吞吐量;
使用建議:數(shù)據(jù)量太大的表不建議使用全表掃描,除非本身需要取出的數(shù)據(jù)較多,占到表數(shù)據(jù)總量的 5% ~ 10% 或以上文章來源:http://www.zghlxwxcb.cn/news/detail-640078.html
2.2.2、TABLE ACCESS BY INDEX SCAN(索引掃描)
索引掃描方式 | 說明 |
---|---|
INDEX UNIQUE SCAN(索引唯一掃描) | 表中某字段存在 UNIQUE、PRIMARY KEY 約束時,Oracle常實現(xiàn)唯一性掃描,每次至多只返回一條記錄 |
INDEX RANGE SCAN(索引范圍掃描) | 在唯一索引列上使用了范圍操作符(如:> < <> >= <= between);在組合索引上,只使用部分列進(jìn)行查詢(查詢時必須包含前導(dǎo)列,否則會走全表掃描);對非唯一索引列上進(jìn)行的任何查詢 |
INDEX FULL SCAN(索引全掃描) | 它依賴數(shù)據(jù)庫對象的統(tǒng)計信息,統(tǒng)計信息的準(zhǔn)確與否會影響CBO做出最優(yōu)的選擇 |
INDEX FAST FULL SCAN(索引快速掃描) | 與 INDEX FULL SCAN 類似,但是一個顯著的區(qū)別是它不對查詢出的數(shù)據(jù)進(jìn)行排序 |
INDEX SKIP SCAN(索引跳躍掃描) | 表有一個復(fù)合索引,且在查詢時有除了前導(dǎo)列(索引中第一列)外的其他列作為條件,并且優(yōu)化器模式為CBO時;當(dāng)Oracle發(fā)現(xiàn)前導(dǎo)列的唯一值個數(shù)很少時,會將每個唯一值都作為常規(guī)掃描的入口,在此基礎(chǔ)上做一次查找,最后合并這些查詢 |
2.2.3、TABLE ACCESS BY ROWID(通過ROWID的表存取)
行的ROWID指出了該行所在的數(shù)據(jù)文件、數(shù)據(jù)塊以及行在該塊中的位置,所以通過ROWID可以快速定位到目標(biāo)數(shù)據(jù)上,這也是Oracle中存取單行數(shù)據(jù)最快的方法文章來源地址http://www.zghlxwxcb.cn/news/detail-640078.html
2.3、表連接方式
表連接方式 | 說明 |
---|---|
SORT MERGE JOIN(排序-合并連接) | 表無驅(qū)動順序;排序-合并連接適用的連接條件有” < <= = > >= “,不適用的連接條件有” <> like“ |
NESTED LOOPS(嵌套循環(huán)) | 嵌套循環(huán)的表有驅(qū)動順序,注意選擇合適的驅(qū)動表。其好處是可以先返回已經(jīng)連接的行,而不必等所有的連接操作處理完才返回數(shù)據(jù),這樣可以實現(xiàn)快速響應(yīng) |
HASH JOIN(哈希連接) | 哈希連接只適用于等值連接(即連接條件為 = ) |
CARTESIAN PRODUCT(笛卡爾積) | 笛卡爾乘積是一個表的每一行依次與另一個表中的所有行匹配 |
到了這里,關(guān)于Oracle之執(zhí)行計劃的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!