1. 程式人生 > >ORACLE EXPLAIN PLAN的總結 (優化SQL語句)

ORACLE EXPLAIN PLAN的總結 (優化SQL語句)

在ORACLE資料庫中,需要對SQL語句進行優化的話需要知道其執行計劃,從而針對性的進行調整.ORACLE的執行計劃的獲得有幾種方法,下面就來總結下

1、EXPLAIN的使用

Oracle RDBMS執行每一條SQL語句,都必須經過Oracle優化器的評估。所以,瞭解優化器是如何選擇(搜尋)路徑以及索引是如何被使用的,對優化SQL語句有很大的幫助。Explain可以用來迅速方便地查出對於給定SQL語句中的查詢資料是如何得到的即搜尋路徑(我們通常稱為Access Path)。從而使我們選擇最優的查詢方式達到最大的優化效果。
1.1 、安 裝

要使用EXPLAIN首先要執行相應的指令碼,創建出Explain_plan表。

具體指令碼執行如下:

$ORACLE_HOME/rdbms/admin/utlxplan.sql
(UNIX) 該指令碼後會生成一個表這個程式會建立一個名為plan_table的表。

1.2 、使用
常規使用語法:
explain PLAN [ SET STATEMENT_ID [=] < string literal > ] [ INTO < table_name > ]
FOR < sql_statement >

其中:
STATEMENT_ID:是一個唯一的字串,把當前執行計劃與儲存在同一PLAN中的其它執行計劃區別開來。
TABLE_NAME:是plan表名,它結構如前所示,你可以任意設定這個名稱。
SQL_STATEMENT:是真正的SQL語句。

比如:

SQL
>explain plan set statement_id='T_TEST' for select * from t_test;

SQL>

Explained

執行下面語句可以查詢到執行計劃

SQL>SELECT A.OPERATION,OPTIONS,OBJECT_NAME,OBJECT_TYPE,ID,PARENT_ID
2 FROM PLAN_TABLE a
3 WHERE STATEMENT_ID='T_TEST'
4 ORDER BY Id;
也可以用這句話 select * from table(dbms_xplan.display); 可以把所有PLAN_TABLE裡的資料羅列出來。

2 、AUTOTRACE的使用方法

2.1、安裝

用sys使用者執行指令碼ultxplan.sql

建立這個表的指令碼是:(UNIX:$ORACLE_HOME/rdbms/admin, Windows:%ORACLE_HOME%\rdbms\admin)ultxplan.sql
SQL> connect sys/[email protected] as sysdba;
SQL> @C:\oracle\ora92\rdbms\admin\utlxplan.sql;
SQL> create public synonym plan_table for plan_table;--建立同義詞
SQL> grant all on plan_table to public;--授權所有使用者

要在資料庫中建立一個角色plustrace,用sys使用者執行指令碼plustrce.sql來建立這個角色,這個指令碼在目錄(UNIX:$ORACLE_HOME/sqlplus/admin, Windows:%ORACLE_HOME%\sqlplus\admin)中;
SQL> @C:\oracle\ora92\sqlplus\admin\plustrce.sql;
然後將角色plustrace授予需要autotrace的使用者;
SQL>grant plustrace to public;
經過以上步驟的設定,就可以在sql*plus中使用autotrace了
2、2 使用

使用起來非常方便,只要使用一條命令就可以了
SQL>SET AUTOTRACE ON;

*autotrace功能只能在SQL*PLUS裡使用

其他一些使用方法:
2.2.1、在SQLPLUS中得到語句總的執行時間
SQL> set timing on;

2.2.2、只顯示執行計劃--(會同時執行語句得到結果)
SQL>set autotrace on explain
比如:
sql> select count(*) from test;
count(*)
-------------
4

Execution plan
----------------------------
0 select statement ptimitzer=choose (cost=3 card=1)
1 0 sort(aggregate)
2 1 partition range(all)
3 2 table access (full) of 't_test' (cost=3 card=900)



2.2.3、只顯示統計資訊---(會同時執行語句得到結果)
SQL>set autotrace on statistics;
(備註:對於SYS使用者,統計資訊將會是0)

2.2.4、顯示執行計劃,遮蔽執行結果--(但語句實質還執行的
SQL> set autotrace on traceonly;
(備註:同SET AUTOTRACE ON; 只不過不顯示結果,顯示計劃和統計)

2.2.5、僅僅顯示執行計劃,遮蔽其他一切結果--(語句還是執行了)
SQL>set autotrace on traceonly explain;
對於僅僅檢視大表的Explain Plan非常管用。

2.2.6、關閉
SQL>set autotrace off;

總結:SQLPLUS 下的自動顯示功能,在看執行計劃中其語句還是會被執行的。尤其在執行UPDATE/DELETE語句時請千萬注意,ORACLE是先執行指令碼同時顯示執行計劃的,即使使用set autotrace on traceonly explain;
這個時候推薦使用EXPLAIN PLAN FOR來看或者PL/SQL等第三方工具

3、第三工具來看執行計劃
如果在PL/SQL中使用選擇要查詢語句顯示執行計劃,則只需要SQL WINDOWS 窗口裡面輸入要查詢的SQL語句,然後選擇按鍵F5或者在選單TOOLS?D?D>Explain Plan 選單按鍵就可以在執行計劃視窗檢視該語句的執行計劃。
在TOAD語句中在執行當前的SQL視窗中選擇下方的Explain PlanTAB頁即可以檢視要執行語句的執行計劃資訊。

4、限制
explain真正的唯一的限制是使用者不能去解釋其它使用者的表,檢視,索引或其它型別,使用者必須是所有被解釋事物的所有者,如果不是所有者而只有select許可權,explain會返回一個錯誤。

相關推薦

ORACLE EXPLAIN PLAN總結 (優化SQL語句

在ORACLE資料庫中,需要對SQL語句進行優化的話需要知道其執行計劃,從而針對性的進行調整.ORACLE的執行計劃的獲得有幾種方法,下面就來總結下 1、EXPLAIN的使用 Oracle RDBMS執行每一條SQL語句,都必須經過Oracle優化器的評估。所以,瞭解優化器是如何選擇(搜尋)路徑以及索引是如何

ORACLE OEM簡介(如何利用OEM檢視oracle當前在執行哪些SQL語句

"。   A:在NT系統上,你必須把"Logonasabatchjob"許可權授予登入使用者,然 後在OEMPreferredCredentials中設定此使用者。如果**程式是一個7.3.x的 **程式,那這個使用者必須是一個本地的NT使用者,不能為一個DOMAIN使用者。   在Unix系統上,**程式的

ORACLE索引使用總結SQL優化及避免索引無效小技巧

  一:索引基本概念 oracle提供了兩種方式,從表中讀取所有行(即全表掃描),或者通過ROWID一次讀取一行; 如果只訪問大資料量表的5%的行,並且使用索引標識需要讀取的資料塊,這樣花費的 I/O 較少,索引對效能的改程序度: 1.取決於資料的選擇性 2.資料在表的資料塊中

性能調優篇 - TPS低 - 優化SQL語句(一

導致 http ont xxx pla 測試的 打印 接口 class 在執行性能測試的時候,問題總千奇百怪的。我這裏整理了一些常用的性能測試時查看問題的方法。 一.SQL語句沒有引用索引: 執行性能測試時,服務器的運行情況下: 數據庫、應用程序CPU不超過80%; 內存

oracle資料庫建立索引以及簡單優化sql語句

Oracle 建立索引及SQL優化 資料庫索引: 索引有單列索引 複合索引之說 如何某表的某個欄位有主鍵約束和唯一性約束,則Oracle 則會自動在相應的約束列上建議唯一索引。資料庫索引主要進行提高訪問速度。 建設原則:  1、索引應該經常建在Where 子句經常用到的列上。如

Oracle系統表整理+常用SQL語句收集(轉載

原文:https://www.cnblogs.com/jiangxinnju/p/5840420.html-- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX開頭的絕大部分都是檢視 -- DBA_TABLES意為DBA擁有的或可以訪問的所有的關係表。 -- ALL_TABLES意

Oracle PL/SQL進階程式設計(第十五彈:動態SQL語句

理解動態SQL語句 動態SQL語句基礎 動態SQL語句不僅是指SQL語句是動態拼接而成的,更主要的是SQL語句所使用的物件也是執行時期才建立的。出現這種功能跟PL/SQL本身的早起繫結特性有關,早PL/SQL中,所有的物件必須已經存在於資料庫中才能執行,

oracle中hint的使用-SQL語句優化

表明對語句塊選擇基於開銷的優化方法,並獲得最佳吞吐量,使資源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT'; 2. /*+FIRST_ROWS*/ 表明對語句塊選擇基於開銷的優化方

ORACLE優化SQL語句

換工作剛剛入職,公司要求學習這片文章。覺得挺給力,分享給各位網友。共同學習,共同進步吧!(1) 選擇最有效率的表名順序(只在基於規則的優化器中有效): ORACLE 的解析器按照從右到左的順序處理FROM 子句中的表名,FROM 子句中寫在最後的表(基礎表driving t

解決oracle數據庫刪除sql語句出現^H字樣

fig alias bsp readline plus rlwrap p s sta .gz 1:安裝readline包 yum install readline* 2:安裝源碼包: rlwrap-0.30.tar.gz ./configure &&

數據庫表的管理(使用T-SQL語句

則無 插入 更新 例如 分隔 語法 執行 允許 -s 使用T-SQL語句操作數據表使用SQL Server Managenment 中對數據進行插入,更新或者刪除比較簡單。除此外,使用T-SQL語句實現表數據的插入,更新和刪除等操作。 1。插入數據INSERT語法格式如下I

淺談MySQL中優化sql語句查詢常用的30種方法

系統資源 all 數據量過大 連續 don 問題 not sele 客戶端 1.對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 2.應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用

淺談 MySQL 中優化 SQL 語句查詢常用的 30 種方法

個數 尋找 情況 don union all 子句 set 其他 算術 1、對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 2、應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引

檢視當前oracle中正在執行的sql語句——即查詢oracle程序的sql

select a.program, b.spid, c.sql_text,c.SQL_ID from v$session a, v$process b, v$sqlarea c where a.paddr = b.addr and a.sql_hash_value = c.hash_value an

30種mysql優化sql語句查詢的方法

30種mysql優化sql語句查詢的方法 1.對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。   2.應儘量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。   3.應儘量避

mysql 優化sql語句的幾種方法

化sql語句的幾種方法 1、通過show status命令瞭解SQL的執行效率 show [session|global]status like 'com_%'; 2、定位執行效率較低的SQL語句 1)慢查詢   開啟方法 linux: 配置檔案(/etc/m

MySQL中優化sql語句查詢常用的方法

1.對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 2.應儘量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。 3.應儘量避免在 where 子句中對欄位進行 null 值

oracle一次提交大量sql語句 begin end的使用

有時候業務會包含很多次資料庫操作,為了減少資料庫連線,我們會選擇一次提交大量sql, 這時我們會用到begin end,使用begin end需要注意的是,每個sql語句都要確保以“;”結尾,代表一句sql結束, 比如我們要執行一次更新工作安排詳情的業務,但是工作安排和員工以中間表關聯(執行工作

Oracle資料庫常用總結(持續更新

Oracle是甲骨文(Oracle)公司的一款關係型資料庫管理系統(Relational Database Management System:RDBMS),在關係型資料庫領域,是最常用的資料庫之一,其他常用關係型資料庫還有:開源的MySQL,IBM的DB2

MySQL查詢不使用索引彙總 + 如何優化sql語句

不使用索引原文 : http://itlab.idcquan.com/linux/MYSQL/918330.html MySQL查詢不使用索引彙總   眾所周知,增加索引是提高查詢速度的有效途徑,但是很多時候,即使增加了索引,查詢仍然不使用索引,這種情況嚴重影響效能,這裡