關於Oracle的提示詳解(1)

weixin_34377065發表於2012-03-14

 對於Oracle效能調優來說,在初始設計的時候,按照Oracle 推薦的OMF進行安裝配置之後是最優化的物理結構。

然而實際情況是這樣的:大部分的效能很差的資料庫,究其根本原因是為程式中的SQL程式碼很糟糕,很多程式設計師可能不清楚Oracle的體系結構,不知道Oracle對於一條sql是如何處理的,就會想當然的去寫,造成語句未使用繫結變數,執行計劃沒有使用索引,大部分都是全表掃描。有時候部門就需要有一位對Oracle內部體系結構很清楚地DBA對開發人員進行培訓,

有點兒悲劇的感覺。

好了,既然實際上是這樣的,我在此就介紹一些優化的技巧:

Oracle 大概知道會有這樣的情況,就給我們提供了一種優化的方案--提示

 

提示的基本語法是:

 /*+    提示名稱  */    

像一種註釋,提示名稱就是具體的一些提示語法關鍵字 如:FULL

寫出來就像這個樣子:  select  /*+  FULL (table)  */ column1,.....  from   table

如果提示語法不正確,那也不用擔心,除了沒有達到預期的結果,也不會有什麼影響,Oracle會忽略它。

 

.使用FULL提示

語法:  select  /*+  FULL (table)  */ column1,.....  from   table

 

其中的 table 是執行全表掃描的表名,如果使用了表的別名,那就必須使用別名,否則提示將不能工作。

 

示例:

 

select    /*+   FULL(emp)  */  *

 

from     emp

where   deptno= 1 ;

 

1.使用scott 使用者連線示例資料庫:

開啟sql 跟蹤, set  autotrace  on

2.不新增提示執行上述語句並且在 deptno 有索引emp_deptno,輸出的執行計劃如下:執行的是索引範圍掃描。

 

3.執行上述示例新增 FULL 提示執行結果如下: 執行計劃執行的是全表掃描

 

 

提示:當一個表資料行不是很多的情況下,執行索引範圍掃描比全表掃描要慢一些。

但是以上的圖示去相反,全表掃描比索引範圍掃描要慢,這是因為沒有對錶進行收集統計資訊

4.執行表分析 analyze  table  emp  compute  statistics

在此執行上述SQL結果:

FULL提示

 

FULL提示:

 

對比以上結果可以看出,FULL提示對於優化某些小表是很有幫助的。

 

 

 

 

相關文章