oracle for循环_浅谈Oracle的执行计划
生活随笔
收集整理的這篇文章主要介紹了
oracle for循环_浅谈Oracle的执行计划
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
執(zhí)行計劃執(zhí)行計劃是一條sql語句在ORACLE中的執(zhí)行過程或訪問路徑的描述。即對一個sql語句,從執(zhí)行計劃可以看出oracle完成任務的詳細方案。如果要分析某條SQL的性能問題,通常我們要先看SQL的執(zhí)行計劃,看看SQL的每一步執(zhí)行是否存在問題。 看懂執(zhí)行計劃也就成了SQL優(yōu)化的先決條件。 通過執(zhí)行計劃定位性能問題,定位后就通過建立索引、修改sql等解決問題。相關概念-單表訪問路徑
- TABLE ACESS FULL 全表掃描:沒有建索引或者沒有走上索引, 在較大的表上非常容易出現(xiàn)性能問題,應該盡量避免。
- index range scan 索引范圍掃描 :走非唯一索引,或者是唯一索引使用了range操作(< > between等)
- index unique scan 索引唯一掃描:可以定位到單個ROWID。如果存在UNIQUE 或PRIMARY KEY 約束,就可以走索引唯一掃描
- index skip scan 索引跳躍掃描 :往往是走組合索引,但where條件中沒有包括組合索引中所有的列
- index full scan 索引全掃描
- index fast full scan 索引快速全掃描
相關概念-表的連接方式
- nestLoop 嵌套連接:可以理解成兩個嵌套的for循環(huán),嵌套連接適合于返回少量數(shù)據(jù),并且內(nèi)部表關聯(lián)字段上存在索引,外部表很小或者走索引后返回很少數(shù)據(jù)。成本約等于N次索引(N為外部表返回的記錄數(shù))
- hash join:
總成本為兩張表單表訪問路徑的總成本!即使不存在索引,也就是兩張表的全掃,與記錄數(shù)無關。因此Hash連接適合返回大量數(shù)據(jù),不要求表關聯(lián)字段存在索引,Hash連接用在返回少量數(shù)據(jù)上很吃虧
執(zhí)行計劃的解讀
- 對同一凹層,先上后下執(zhí)行
- 對不同凹層,先里后外執(zhí)行
如何查看sql語句的執(zhí)行計劃
- 直接解析SQL語句.
Explain plan for XXX;
Select * from table(dbms_xplan.display); - 根據(jù)SQL_ID查詢,
select * from table
(dbms_xplan.display_cursor('&sql_id',0,
'allstats last')); - 從視圖v$sql_plan 中獲取。
- sqplus中可以使用set autotrace on,自動獲取執(zhí)行計劃和統(tǒng)計信息
總結
以上是生活随笔為你收集整理的oracle for循环_浅谈Oracle的执行计划的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java小程序源码_【小程序源码分享】基
- 下一篇: a表两个字段都与b表一个字段关联_数据库