打印本文 打印本文 关闭窗口 关闭窗口
Oracle常見問題集(四)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数6469  更新时间:2009/4/22 22:05:52  文章录入:mintao  责任编辑:mintao
最內部的操作將被最先解讀, 如果兩個操作處於同一層中,帶有最小操作號的將被首先執行.

NESTED LOOP是少數不按照上述規則處理的操作, 正確的執行路徑是檢查對NESTED

LOOP提供資料的操作,其中操作號最小的將被最先處理.

 

譯者按:

 

通過實踐, 感到還是用SQLPLUS中的SET TRACE 功能比較方便.

舉例:

 

SQL> list

1 SELECT *

2 FROM dept, emp

3* WHERE emp.deptno = dept.deptno

SQL> set autotrace traceonly /*traceonly 可以不顯示執行結果*/

SQL> /

14 rows selected.

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE

1 0 NESTED LOOPS

2 1 TABLE ACCESS (FULL) OF ''''EMP''''

3 1 TABLE ACCESS (BY INDEX ROWID) OF ''''DEPT''''

4 3 INDEX (UNIQUE SCAN) OF ''''PK_DEPT'''' (UNIQUE)

 

Statistics

----------------------------------------------------------

0 recursive calls

2 db block gets

30 consistent gets

0 physical reads

0 redo size

2598 bytes sent via SQL*Net to client

503 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

14 rows processed

 

通過以上分析,可以得出實際的執行步驟是:

1. TABLE ACCESS (FULL) OF ''''EMP''''

2. INDEX (UNIQUE SCAN) OF ''''PK_DEPT'''' (UNIQUE)

3. TABLE ACCESS (BY INDEX ROWID) OF ''''DEPT''''

4. NESTED LOOPS (JOINING 1 AND 3)

: 目前許多第三方的工具如TOADORACLE本身提供的工具如OMSSQL Analyze都提供了極其方便的EXPLAIN

PLAN工具.也許喜歡圖形化介面的朋友們可以選用它們.

25. 用索引提高效率

索引是表的一個概念部分,用來提高檢索資料的效率. 實際上,ORACLE使用了一個複雜的自平衡B-tree結構.

通常,通過索引查詢資料比全表掃描要快. ORACLE找出執行查詢和Update語句的最佳路徑時, ORACLE優化器將使用索引.

同樣在聯結多個表時使用索引也可以提高效率. 另一個使用索引的好處是,它提供了主鍵(primary key)的唯一性驗證.

除了那些LONGLONG RAW資料類型, 你可以索引幾乎所有的列. 通常, 在大型表中使用索引特別有效. 當然,你也會發現,

在掃描小表時,使用索引同樣能提高效率.

雖然使用索引能得到查詢效率的提高,但是我們也必須注意到它的代價. 索引需要空間來

存儲,也需要定期維護, 每當有記錄在表中增減或索引列被修改時, 索引本身也會被修改. 這意味著每條記錄的INSERT ,

DELETE , UPDATE將爲此多付出4 , 5 次的磁片I/O .

因爲索引需要額外的存儲空間和處理,那些不必要的索引反而會使查詢反應時間變慢.

 

譯者按:

定期的重構索引是有必要的.

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ...  下一页 >> 

打印本文 打印本文 关闭窗口 关闭窗口