老司机91精品网站在线观看-老司机67194免费观看-老司国产精品视频-老熟人老女人国产老太-中文字幕日本在线-中文字幕日本一区久久

始創(chuàng)于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

Understand Oracle執(zhí)行計劃

發(fā)布時間:  2012/8/26 15:25:42

一、什么是執(zhí)行計劃
An explain plan is a representation of the access path that is taken when a query is executed within Oracle.
二、如何訪問數(shù)據(jù)
At the physical level Oracle reads blocks of data. The smallest amount of data read is a single Oracle block, the largest is constrained by operating system limits (and multiblock i/o). Logically Oracle finds the data to read by using the following methods:
Full Table Scan (FTS)    --全表掃描
Index Lookup (unique & non-unique)    --索引掃描(唯一和非唯一)
Rowid    --物理行id
三、執(zhí)行計劃層次關系
When looking at a plan, the rightmost (ie most inndented) uppermost operation is the first thing that is executed. --采用最右最上最先執(zhí)行的原則看層次關系,在同一級如果某個動作沒有子ID就最先執(zhí)行
1.一個簡單的例子:
SQL> select  /*+parallel (e 4)*/  *  from  emp  e;
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=82 Bytes=7134)
   1    0   TABLE ACCESS* (FULL) OF 'EMP' (Cost=1 Card=82 Bytes=7134):Q5000
--[:Q5000]表示是并行方式
   1 PARALLEL_TO_SERIAL            SELECT /*+ NO_EXPAND ROWID(A1) */ A1."EMPNO"
                                   ,A1."ENAME",A1."JOB",A1."MGR",A1."HI
優(yōu)化模式是CHOOSE的情況下,看Cost參數(shù)是否有值來決定采用CBO還是RBO:
SELECT STATEMENT [CHOOSE] Cost=1234 --Cost有值,采用CBO
SELECT STATEMENT [CHOOSE]           --Cost為空,采用RBO(9I是如此顯示的)
2.層次的父子關系的例子:
PARENT1
**FIRST CHILD
****FIRST GRANDCHILD
**SECOND CHILD
Here the same principles apply, the FIRST GRANDCHILD is the initial operation then the FIRST CHILD followed by the SECOND CHILD and finally the PARENT collates the output.
四、例子解說
Execution Plan
----------------------------------------------------------
0 **SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=8 Bytes=248)
1 0 **HASH JOIN (Cost=3 Card=8 Bytes=248)
2 1 ****TABLE ACCESS (FULL) OF 'DEPT' (Cost=1 Card=3 Bytes=36)
3 1 ****TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=16 Bytes=304)
左側(cè)的兩排數(shù)據(jù),前面的是序列號ID,后面的是對應的PID(父ID)。
A shortened summary of this is:
Execution starts with ID=0: SELECT STATEMENT but this is dependand on it's child objects
So it executes its first child step: ID=1 PID=0 HASH JOIN but this is dependand on it's child objects
So it executes its first child step: ID=2 PID=1 TABLE ACCESS (FULL) OF 'DEPT'
Then the second child step: ID=3 PID=2 TABLE ACCESS (FULL) OF 'EMP'
Rows are returned to the parent step(s) until finished
五、表訪問方式
1.Full Table Scan (FTS) 全表掃描
In a FTS operation, the whole table is read up to the high water mark (HWM). The HWM marks the last block in the table that has ever had data written to it. If you have deleted all the rows then you will still read up to the HWM. Truncate resets the HWM back to the start of the table. FTS uses multiblock i/o to read the blocks from disk.   --全表掃描模式下會讀數(shù)據(jù)到表的高水位線(HWM即表示表曾經(jīng)擴展的最后一個數(shù)據(jù)塊),讀取速度依賴于Oracle初始化參數(shù)db_block_multiblock_read_count(我覺得應該這樣翻譯:FTS掃描會使表使用上升到高水位(HWM),HWM標識了表最后寫入數(shù)據(jù)的塊,如果你用DELETE刪除了所有的數(shù)據(jù)表仍然處于高水位(HWM),只有用TRUNCATE才能使表回歸,FTS使用多IO從磁盤讀取數(shù)據(jù)塊).
Query Plan
------------------------------------
SELECT STATEMENT [CHOOSE] Cost=1
**INDEX UNIQUE SCAN EMP_I1   --如果索引里就找到了所要的數(shù)據(jù),就不會再去訪問表
2.Index Lookup 索引掃描
There are 5 methods of index lookup:
index unique scan   --索引唯一掃描
Method for looking up a single key value via a unique index. always returns a single value, You must supply AT LEAST the leading column of the index to access data via the index.
eg:SQL> explain plan for select empno,ename from emp where empno=10;
 
index range scan   --索引局部掃描
Index range scan is a method for accessing a range values of a particular column. AT LEAST the leading column of the index must be supplied to access data via the index. Can be used for range operations (e.g. > < <> >= <= between) .
eg:SQL> explain plan for select mgr from emp where mgr = 5;
 
index full scan   --索引全局掃描
Full index scans are only available in the CBO as otherwise we are unable to determine whether a full scan would be a good idea or not. We choose an index Full Scan when we have statistics that indicate that it is going to be more efficient than a Full table scan and a sort. For example we may do a Full index scan when we do an unbounded scan of an index and want the data to be ordered in the index order.
eg: SQL> explain plan for select empno,ename from big_emp order by empno,ename;
 
index fast full scan   --索引快速全局掃描,不帶order by情況下常發(fā)生
Scans all the block in the index, Rows are not returned in sorted order, Introduced in 7.3 and requires V733_PLANS_ENABLED=TRUE and CBO, may be hinted using INDEX_FFS hint, uses multiblock i/o, can be executed in parallel, can be used to access second column of concatenated indexes. This is because we are selecting all of the index.
eg: SQL> explain plan for select empno,ename from big_emp;
 
index skip scan   --索引跳躍掃描,where條件列是非索引的前導列情況下常發(fā)生
Index skip scan finds rows even if the column is not the leading column of a concatenated index. It skips the first column(s) during the search.
eg:SQL> create index i_emp on emp(empno, ename);
SQL> select /*+ index_ss(emp i_emp)*/ job from emp where ename='SMITH';
 
3.Rowid 物理ID掃描
This is the quickest access method available.Oracle retrieves the specified block and extracts the rows it is interested in. --Rowid掃描是最快的訪問數(shù)據(jù)方式
 
六、表連接方式
七、運算符
1.sort    --排序,很消耗資源
There are a number of different operations that promote sorts:
(1)order by clauses (2)group by (3)sort merge join –-這三個會產(chǎn)生排序運算
 
2.filter    --過濾,如not in、min函數(shù)等容易產(chǎn)生
Has a number of different meanings, used to indicate partition elimination, may also indicate an actual filter step where one row source is filtering, another, functions such as min may introduce filter steps into query plans.
 
3.view    --視圖,大都由內(nèi)聯(lián)視圖產(chǎn)生(可能深入到視圖基表)
When a view cannot be merged into the main query you will often see a projection view operation. This indicates that the 'view' will be selected from directly as opposed to being broken down into joins on the base tables. A number of constructs make a view non mergeable. Inline views are also non mergeable.
eg: SQL> explain plan for
select ename,tot from emp,(select empno,sum(empno) tot from big_emp group by empno) tmp
where emp.empno = tmp.empno;
Query Plan
------------------------
SELECT STATEMENT [CHOOSE]
**HASH JOIN
**TABLE ACCESS FULL EMP [ANALYZED]
**VIEW
****SORT GROUP BY
******INDEX FULL SCAN BE_IX
 
4.partition view     --分區(qū)視圖
Partition views are a legacy technology that were superceded by the partitioning option. This section of the article is provided as reference for such legacy systems.
示例:假定A、B、C都是不是小表,且在A表上一個組合索引:A(a.col1,a.col2) ,注意a.col1列為索引的引導列。考慮下面的查詢:
select A.col4   from  A , B , C
where B.col3 = 10  and A.col1 = B.col1 and A.col2 = C.col2 and C.col3 = 5;
Execution Plan
------------------------------------
  0   SELECT STATEMENT Optimizer=CHOOSE
  1  0 MERGE JOIN
  2  1 SORT (JOIN)
  3  2 NESTED LOOPS
  4  3 TABLE ACCESS (FULL) OF 'B'
  5  3 TABLE ACCESS (BY INDEX ROWID) OF 'A'
  6  5 INDEX (RANGE SCAN) OF 'INX_COL12A' (NON-UNIQUE)
  7  1 SORT (JOIN)
  8  7 TABLE ACCESS (FULL) OF 'C'
Statistics(統(tǒng)計信息參數(shù),參見另外個轉(zhuǎn)載的文章)
--------------------------------------
     0 recursive calls(歸調(diào)用次數(shù))
     8 db block gets(從磁盤上讀取的塊數(shù),即通過update/delete/select for update讀的次數(shù))
     6 consistent gets(從內(nèi)存里讀取的塊數(shù),即通過不帶for update的select 讀的次數(shù))
     0 physical reads(物理讀—從磁盤讀到數(shù)據(jù)塊數(shù)量,一般來說是'consistent gets' + 'db block gets')
     0 redo size      (重做數(shù)——執(zhí)行SQL的過程中,產(chǎn)生的重做日志的大小)
    551 bytes sent via SQL*Net to client
    430 bytes received via SQL*Net from client
     2 SQL*Net roundtrips to/from client
     2 sorts (memory) (在內(nèi)存中發(fā)生的排序)
     0 sorts (disk)   (在硬盤中發(fā)生的排序)
     6 rows processed
  在表做連接時,只能2個表先做連接,然后將連接后的結(jié)果作為一個row source,與剩下的表做連接,在上面的例子中,連接順序為B與A先連接,然后再與C連接:
B   <---> A <--->  C
col3=10       col3=5
如果沒有執(zhí)行計劃,分析一下,上面的3個表應該拿哪一個作為第一個驅(qū)動表?從SQL語句看來,只有B表與C表上有限制條件,所以第一個驅(qū)動表應該為這2個表中的一個,到底是哪一個呢?
 
B表有謂詞B.col3 = 10,這樣在對B表做全表掃描的時候就將where子句中的限制條件(B.col3 = 10)用上,從而得到一個較小的row source, 所以B表應該作為第一個驅(qū)動表。而且這樣的話,如果再與A表做關聯(lián),可以有效利用A表的索引(因為A表的col1列為leading column)。
  上面的查詢中C表上也有謂詞(C.col3 = 5),有人可能認為C表作為第一個驅(qū)動表也能獲得較好的性能。讓我們再來分析一下:如果C表作為第一個驅(qū)動表,則能保證驅(qū)動表生成很小的row source,但是看看連接條件A.col2 = C.col2,此時就沒有機會利用A表的索引,因為A表的col2列不為leading column,這樣nested loop的效率很差,從而導致查詢的效率很差。所以對于NL連接選擇正確的驅(qū)動表很重要。
  因此上面查詢比較好的連接順序為(B - - > A) - - > C。如果數(shù)據(jù)庫是基于代價的優(yōu)化器,它會利用計算出的代價來決定合適的驅(qū)動表與合適的連接順序。一般來說,CBO都會選擇正確的連接順序,如果CBO選擇了比較差的連接順序,我們還可以使用Oracle提供的hints來讓CBO采用正確的連接順序。如下所示
select /*+ ordered */ A.col4
from  B,A,C
where B.col3 = 10   and  A.col1 = B.col1   and  A.col2 = C.col2   and  C.col3 = 5
既然選擇正確的驅(qū)動表這么重要,那么讓我們來看一下執(zhí)行計劃,到底各個表之間是如何關聯(lián)的,從而得到執(zhí)行計劃中哪個表應該為驅(qū)動表:
 
在執(zhí)行計劃中,需要知道哪個操作是先執(zhí)行的,哪個操作是后執(zhí)行的,這對于判斷哪個表為驅(qū)動表有用處。判斷之前,如果對表的訪問是通過rowid,且該rowid的值是從索引掃描中得來得,則將該索引掃描先從執(zhí)行計劃中暫時去掉。然后在執(zhí)行計劃剩下的部分中,判斷執(zhí)行順序的指導原則就是:最右、最上的操作先執(zhí)行。具體解釋如下:
 
得到去除妨礙判斷的索引掃描后的執(zhí)行計劃:Execution Plan
-------------------------------------
  0   SELECT STATEMENT Optimizer=CHOOSE
  1  0 MERGE JOIN
  2  1 SORT (JOIN)
  3  2    NESTED LOOPS
  4  3       TABLE ACCESS (FULL) OF 'B'
5            3       TABLE ACCESS (BY INDEX ROWID) OF 'A'
6  5         INDEX (RANGE SCAN) OF 'INX_COL12A' (NON-UNIQUE)
  7  1 SORT (JOIN)
  8  7    TABLE ACCESS (FULL) OF 'C'
  看執(zhí)行計劃的第3列,即字母部分,每列值的左面有空格作為縮進字符。在該列值左邊的空格越多,說明該列值的縮進越多,該列值也越靠右。如上面的執(zhí)行計劃所示:第一列值為6的行的縮進最多,即該行最靠右;第一列值為4、5的行的縮進一樣,其靠右的程度也一樣,但是第一列值為4的行比第一列值為5的行靠上;談論上下關系時,只對連續(xù)的、縮進一致的行有效。
 

  從這個圖中我們可以看到,對于NESTED LOOPS部分,最右、最上的操作是TABLE ACCESS (FULL) OF 'B',所以這一操作先執(zhí)行,所以該操作對應的B表為第一個驅(qū)動表(外部表),自然,A表就為內(nèi)部表了。從圖中還可以看出,B與A表做嵌套循環(huán)后生成了新的row source ,對該row source進行來排序后,與C表對應的排序了的row source(應用了C.col3 = 5限制條件)進行SMJ連接操作。所以從上面可以得出如下事實:B表先與A表做嵌套循環(huán),然后將生成的row source與C表做排序—合并連接。
       通過分析上面的執(zhí)行計劃,我們不能說C表一定在B、A表之后才被讀取,事實上,B表有可能與C表同時被讀入內(nèi)存,因為將表中的數(shù)據(jù)讀入內(nèi)存的操作可能為并行的。事實上許多操作可能為交叉進行的,因為Oracle讀取數(shù)據(jù)時,如果就是需要一行數(shù)據(jù)也是將該行所在的整個數(shù)據(jù)塊讀入內(nèi)存,而且有可能為多塊讀。
    看執(zhí)行計劃時,我們的關鍵不是看哪個操作先執(zhí)行,哪個操作后執(zhí)行,而是關鍵看表之間連接的順序(如得知哪個為驅(qū)動表,這需要從操作的順序進行判斷)、使用了何種類型的關聯(lián)及具體的存取路徑(如判斷是否利用了索引)
在從執(zhí)行計劃中判斷出哪個表為驅(qū)動表后,根據(jù)我們的知識判斷該表作為驅(qū)動表(就像上面判斷ABC表那樣)是否合適,如果不合適,對SQL語句進行更改,使優(yōu)化器可以選擇正確的驅(qū)動表。


本文出自:億恩科技【www.ypdoo.com.cn】

服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線

     
     
    欧美a级片免费看| 亚洲www美色| 韩国毛片免费大片| 国产亚洲免费观看| 免费毛片基地| 午夜欧美成人香蕉剧场| 青青久久国产成人免费网站| 国产伦精品一区二区三区无广告| 韩国三级视频网站| 天天色成人网| 超级乱淫伦动漫| 精品国产一区二区三区免费 | 亚欧成人乱码一区二区| 亚洲精品久久玖玖玖玖| 国产一区二区精品久久91| 九九精品在线| 日日夜夜婷婷| 欧美大片一区| 日本伦理黄色大片在线观看网站| 国产极品精频在线观看| 国产原创中文字幕| 欧美另类videosbestsex久久| 天天做日日干| 久久国产精品自由自在| 天天做人人爱夜夜爽2020毛片| 一本高清在线| 可以免费看污视频的网站| 国产一区免费在线观看| 国产亚洲免费观看| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 午夜精品国产自在现线拍| 国产91精品一区| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 91麻豆高清国产在线播放| 午夜精品国产自在现线拍| 欧美a级片免费看| 高清一级做a爱过程不卡视频| 中文字幕97| 欧美激情一区二区三区中文字幕| 国产一级强片在线观看| 国产一区二区精品久久| 国产成人欧美一区二区三区的| 黄视频网站免费看| 91麻豆tv| 亚洲www美色| 国产不卡高清| 高清一级做a爱过程不卡视频| 香蕉视频久久| 亚洲第一色在线| 日韩在线观看免费完整版视频| 日韩在线观看免费完整版视频| 欧美激情一区二区三区视频高清 | 日韩中文字幕一区| 国产不卡在线看| 国产伦精品一区二区三区在线观看| 免费的黄视频| 国产成人啪精品| 青青久久网| 欧美激情一区二区三区在线播放| 久久成人性色生活片| 国产视频一区二区在线播放| 日韩在线观看视频网站| 高清一级做a爱过程不卡视频| 日韩在线观看免费| 91麻豆高清国产在线播放| 午夜激情视频在线播放| 麻豆午夜视频| 成人免费观看的视频黄页| 欧美激情一区二区三区中文字幕| 免费的黄视频| 午夜激情视频在线观看| 精品视频在线观看视频免费视频| 久久久久久久免费视频| 日韩专区第一页| 国产91丝袜在线播放0| 国产精品免费久久| 欧美激情伊人| 国产a毛片| 国产麻豆精品| 国产91丝袜在线播放0| 成人免费观看男女羞羞视频| 亚洲精品永久一区| 色综合久久天天综合绕观看 | 韩国毛片基地| 国产一区二区精品在线观看| 国产视频久久久| 成人免费网站久久久| 亚洲精品久久玖玖玖玖| 久久99这里只有精品国产| 精品国产三级a∨在线观看| 一本高清在线| 国产精品1024永久免费视频| 精品视频在线观看视频免费视频| 欧美激情在线精品video| 韩国毛片免费大片| 99久久精品国产麻豆| 麻豆网站在线看| 青青青草影院| 日韩在线观看视频网站| 一级女性全黄生活片免费| 国产成人欧美一区二区三区的| 国产视频在线免费观看| 精品久久久久久免费影院| 九九九国产| 国产一区二区精品| 欧美日本免费| 精品国产一区二区三区久久久狼| 青青久热| 亚飞与亚基在线观看| 国产一区精品| 美女免费毛片| 成人免费网站视频ww| 午夜久久网| 一本高清在线| 高清一级片| 一级片片| 国产不卡在线观看视频| 日韩免费在线视频| 精品国产亚洲一区二区三区| 成人影视在线观看| 亚洲精品中文一区不卡| 韩国三级视频网站| 日日夜夜婷婷| 可以免费看毛片的网站| 国产伦久视频免费观看视频| 99久久精品费精品国产一区二区| 国产精品免费久久| 精品国产一区二区三区精东影业 | 成人免费观看男女羞羞视频| 国产成人啪精品| 久久精品免视看国产成人2021| 国产一级生活片| 午夜家庭影院| 亚洲 男人 天堂| 国产精品自拍在线观看| 国产成人啪精品| 国产一区免费在线观看| 日本在线不卡免费视频一区| 精品久久久久久中文| 午夜精品国产自在现线拍| 国产国语在线播放视频| 精品视频一区二区三区免费| 亚洲第一页色| 欧美α片无限看在线观看免费| 日韩欧美一及在线播放| 欧美1区| 亚洲 激情| 一级女性全黄久久生活片| 色综合久久手机在线| 国产国产人免费视频成69堂| 你懂的日韩| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 二级片在线观看| 91麻豆国产福利精品| 香蕉视频一级| 91麻豆爱豆果冻天美星空| 国产伦精品一区二区三区无广告| 天天色成人网| 亚欧乱色一区二区三区| 亚欧成人乱码一区二区| 国产精品1024在线永久免费| 一级毛片视频播放| 香蕉视频久久| 99热视热频这里只有精品| 一 级 黄 中国色 片| 精品久久久久久影院免费| a级精品九九九大片免费看| 精品视频一区二区| 亚洲第一页乱| 国产极品精频在线观看| 精品视频在线看 | 四虎论坛| 久久久久久久男人的天堂| 999久久久免费精品国产牛牛| 午夜精品国产自在现线拍| 日韩一级黄色| 欧美另类videosbestsex高清| | 九九久久99综合一区二区| 日韩欧美一二三区| 免费一级片在线观看| 成人a大片高清在线观看| 一级女人毛片人一女人| 国产精品1024永久免费视频| 成人免费高清视频| 二级片在线观看| 日本在线不卡视频| 精品国产一区二区三区久| 黄视频网站免费| 欧美激情一区二区三区中文字幕| 一级女人毛片人一女人| 国产网站免费观看| 欧美激情一区二区三区在线| 香蕉视频一级| 黄色免费三级| 欧美另类videosbestsex高清 | 可以免费在线看黄的网站| 国产伦精品一区三区视频| 日本伦理黄色大片在线观看网站| 国产伦精品一区二区三区无广告|