Oracle查詢執(zhí)行計劃
執(zhí)行計劃(Execution Plan)也叫查詢計劃(Query Plan),它是數(shù)據(jù)庫執(zhí)行SQL語句的具體步驟和過程。SQL查詢語句的執(zhí)行計劃主要包括:
● 訪問表的方式。數(shù)據(jù)庫通過索引或全表掃描等方式訪問表中的數(shù)據(jù)。
● 多表連接的方式。數(shù)據(jù)庫使用什么連接算法實現(xiàn)表的連接,包括多個表的先后訪問順序。
● 分組聚合以及排序等操作的實現(xiàn)方式。
雖然不同數(shù)據(jù)庫對于SQL查詢的執(zhí)行過程采用了不同的實現(xiàn)方式,但是一個查詢語句大致需要經(jīng)過分析器、優(yōu)化器以及執(zhí)行器的處理并返回最終結(jié)果,同時還可能利用各種緩存來提高訪問性能。
簡單來說,一個查詢語句從客戶端的提交開始,直到服務(wù)器返回最終的結(jié)果,整個過程大致如圖所示。
首先,客戶端提交SQL語句。在此之前客戶端必須連接到數(shù)據(jù)庫服務(wù)器,圖中的連接器就是負責(zé)建立和管理客戶端連接的組件。
然后,分析器(解析器)解析SQL語句的各個組成部分,進行語法分析,并檢查SQL語句的語法是否符合規(guī)范。
例如,以下語句中的FROM關(guān)鍵字錯寫成了FORM:
在這種情況下,所有的數(shù)據(jù)庫管理系統(tǒng)都會返回一個語法錯誤。
然后,優(yōu)化器會利用數(shù)據(jù)庫收集到的統(tǒng)計信息決定SQL語句的最佳執(zhí)行方式。例如,是通過索引還是通過全表掃描的方式訪問單個表,使用什么順序連接多個表,如何實現(xiàn)數(shù)據(jù)的排序等。
優(yōu)化器是決定查詢性能的關(guān)鍵組件,而數(shù)據(jù)庫的統(tǒng)計信息是優(yōu)化器判斷的基礎(chǔ)。
最后,執(zhí)行器根據(jù)優(yōu)化之后的執(zhí)行計劃調(diào)用相應(yīng)的執(zhí)行模塊來獲取數(shù)據(jù),并將結(jié)果返回客戶端。
執(zhí)行計劃的查看方式
方法一:語句查看
在Oracle數(shù)據(jù)庫中,我們同樣可以使用EXPLAIN PLAN FOR命令生成執(zhí)行計劃,不過需要執(zhí)行兩條命令:
EXPLAIN PLAN FOR SELECT * FROM T_USER1 t where t.user_name = 'Admin'; SELECT * FROM TABLE(dbms_xplan.display);
使用EXPLAIN PLAN FOR命令生成執(zhí)行計劃,并將其存儲到系統(tǒng)表PLAN_TABLE中,然后通過一個查詢語句顯示生成的執(zhí)行計劃。
其中dbms_xplan.display是一個Oracle系統(tǒng)函數(shù)。返回的結(jié)果顯示,該語句在Oracle中是通過'SYS_C0016771'索引范圍掃描來查找數(shù)據(jù)的。
方法二:利用工具查看
在常用的Oracle數(shù)據(jù)庫開發(fā)工具PL/SQL中,選擇一段SQL腳本,按F5鍵,即可自動顯示該腳本的執(zhí)行計劃信息,跟方法一查詢出的結(jié)果相同。
在Oracle數(shù)據(jù)庫中,我們可以通過系統(tǒng)表user_indexes和user_ind_columns查詢索引以及相關(guān)的字段信息。
SELECT * FROM user_indexes; SELECT * FROM user_ind_columns;
到此這篇關(guān)于Oracle查詢執(zhí)行計劃的文章就介紹到這了,更多相關(guān)Oracle查詢執(zhí)行計劃內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
oracle遠程連接服務(wù)器出現(xiàn) ORA-12170 TNS:連接超時 解決辦法
oracle遠程連接服務(wù)器出現(xiàn) ORA-12170 TNS:連接超時 解決辦法,需要的朋友可以參考一下2013-03-03oracle數(shù)據(jù)排序后獲取前幾行數(shù)據(jù)的寫法(rownum、fetch方式)
項目中用到Oracle分組查詢?nèi)∶拷M排序后的前N條記錄,group?by?只能返回每個組的單條統(tǒng)計,下面這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)排序后獲取前幾行數(shù)據(jù)的寫法(rownum、fetch方式),需要的朋友可以參考下2022-12-12Oracle中查詢表結(jié)構(gòu)的6種方法總結(jié)
工作中查看oracle表結(jié)構(gòu)經(jīng)常會遇到,下面這篇文章主要給大家介紹了關(guān)于Oracle中查詢表結(jié)構(gòu)的6種方法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-04-04RAC cache fusion機制實現(xiàn)原理分析
本文將詳細介紹RAC cache fusion機制實現(xiàn)原理,需要了解更多的朋友可以參考下2012-12-12解決Hibernate JPA中insert插入數(shù)據(jù)后自動執(zhí)行select last_insert_id()
這篇文章主要介紹了Hibernate JPA中insert插入數(shù)據(jù)后自動執(zhí)行select last_insert_id()的解決方法。需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12