Oracle查看執(zhí)行計(jì)劃的實(shí)現(xiàn)
一、什么是執(zhí)行計(jì)劃?
執(zhí)行計(jì)劃是由Oracle數(shù)據(jù)庫(kù)系統(tǒng)生成的,它描述了SQL語(yǔ)句的執(zhí)行方式,包括SQL語(yǔ)句的執(zhí)行順序、使用的索引、表之間的連接方式等等。執(zhí)行計(jì)劃可以通過(guò)多種方式獲取,如使用EXPLAIN PLAN語(yǔ)句、使用SQL Trace功能、使用SQL Developer等工具。
二、執(zhí)行計(jì)劃的目的
查看 Oracle 的執(zhí)行計(jì)劃的目的是為了了解 SQL 查詢(xún)或語(yǔ)句在數(shù)據(jù)庫(kù)中的執(zhí)行方式和性能表現(xiàn)。執(zhí)行計(jì)劃是一個(gè)詳細(xì)的指南,它描述了 Oracle 數(shù)據(jù)庫(kù)是如何執(zhí)行查詢(xún)的,包括使用哪些索引、連接順序、使用何種算法等等。
通過(guò)查看執(zhí)行計(jì)劃,可以識(shí)別出潛在的性能問(wèn)題或優(yōu)化機(jī)會(huì)。執(zhí)行計(jì)劃提供了查詢(xún)優(yōu)化器在決定如何執(zhí)行查詢(xún)時(shí)所做的選擇的信息,可以幫助開(kāi)發(fā)人員或數(shù)據(jù)庫(kù)管理員了解查詢(xún)的成本和效率,并根據(jù)需要進(jìn)行調(diào)整和優(yōu)化。
執(zhí)行計(jì)劃可以揭示查詢(xún)中存在的性能瓶頸、慢查詢(xún)或未充分利用索引的情況。它還可以幫助開(kāi)發(fā)人員理解查詢(xún)的執(zhí)行順序,以及可能引起性能下降的地方。通過(guò)分析執(zhí)行計(jì)劃,可以確定是否需要調(diào)整查詢(xún)、添加索引、重寫(xiě)查詢(xún)邏輯或優(yōu)化數(shù)據(jù)庫(kù)結(jié)構(gòu),以提高查詢(xún)性能和響應(yīng)時(shí)間。
總結(jié)為以下幾點(diǎn):
- 1. 了解SQL語(yǔ)句的執(zhí)行方式,幫助開(kāi)發(fā)人員和DBA分析SQL語(yǔ)句的性能瓶頸。
- 2. 查看SQL語(yǔ)句的執(zhí)行效率,幫助開(kāi)發(fā)人員和DBA優(yōu)化SQL語(yǔ)句的性能。
- 3. 了解數(shù)據(jù)庫(kù)的物理結(jié)構(gòu),如索引、表之間的連接方式等。
- 4. 幫助開(kāi)發(fā)人員和DBA了解Oracle數(shù)據(jù)庫(kù)的執(zhí)行策略,以便于更好地進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)和優(yōu)化。
三、獲取執(zhí)行計(jì)劃信息
查詢(xún) Oracle 的執(zhí)行計(jì)劃可以提供以下信息:
3.1訪(fǎng)問(wèn)路徑(Access Path):
執(zhí)行計(jì)劃顯示了查詢(xún)?nèi)绾卧L(fǎng)問(wèn)表或索引,包括全表掃描、索引掃描、索引范圍掃描等。這可以幫助確定數(shù)據(jù)是如何被檢索的。
3.2連接順序(Join Order):
如果查詢(xún)涉及多個(gè)表的連接操作,執(zhí)行計(jì)劃將顯示連接的順序。這對(duì)于優(yōu)化查詢(xún)的性能很重要,因?yàn)椴煌倪B接順序可能會(huì)導(dǎo)致不同的性能。
3.3連接類(lèi)型(Join Type):
執(zhí)行計(jì)劃指示了連接操作使用的連接類(lèi)型,如內(nèi)連接、外連接或半連接。這對(duì)于了解查詢(xún)中不同連接操作的性能影響很有幫助。
3.4過(guò)濾條件(Filter Predicates):
執(zhí)行計(jì)劃會(huì)顯示應(yīng)用在表或索引訪(fǎng)問(wèn)上的過(guò)濾條件。這可以幫助確認(rèn)查詢(xún)中的過(guò)濾邏輯是否被正確地應(yīng)用。
3.5排序操作(Sort Operations):
如果查詢(xún)涉及排序操作,執(zhí)行計(jì)劃將顯示排序的方式和排序所使用的算法。這對(duì)于優(yōu)化排序操作的性能很有幫助。
3.6聚合操作(Aggregation Operations):
如果查詢(xún)包含聚合函數(shù)(如 SUM、AVG、COUNT 等),執(zhí)行計(jì)劃將顯示聚合操作的方式和執(zhí)行方法。
3.7數(shù)據(jù)庫(kù)統(tǒng)計(jì)信息(Statistics):
執(zhí)行計(jì)劃可以提供表、索引或列的統(tǒng)計(jì)信息,如行數(shù)、唯一值數(shù)量等。這對(duì)于優(yōu)化查詢(xún)計(jì)劃選擇和索引設(shè)計(jì)很重要。
通過(guò)分析執(zhí)行計(jì)劃,可以確定查詢(xún)中的性能瓶頸和優(yōu)化機(jī)會(huì),了解查詢(xún)的執(zhí)行方式,以及根據(jù)需要進(jìn)行調(diào)整和優(yōu)化的方法。
四、執(zhí)行計(jì)劃的執(zhí)行順序
Oracle執(zhí)行計(jì)劃的執(zhí)行順序是從上往下,從右往左。也就是說(shuō),執(zhí)行計(jì)劃的最底部是最后執(zhí)行的操作,而最頂部是最先執(zhí)行的操作。左邊的操作優(yōu)先級(jí)低于右邊的操作,也就是說(shuō),右邊的操作先執(zhí)行,左邊的操作后執(zhí)行。
口訣:
- 縮進(jìn)最深的,最先執(zhí)行
- 縮進(jìn)深度相同的,先上后下
五、執(zhí)行計(jì)劃的存儲(chǔ)區(qū)
主要包括以下幾個(gè)部分:
- 1. 表操作符:表示對(duì)表的操作,如全表掃描、索引掃描等。
- 2. 連接操作符:表示對(duì)表之間的連接操作,如HASH JOIN、NESTED LOOPS JOIN等。
- 3. 過(guò)濾操作符:表示對(duì)結(jié)果集進(jìn)行過(guò)濾的操作,如WHERE、HAVING等。
- 4. 訪(fǎng)問(wèn)操作符:表示對(duì)數(shù)據(jù)的訪(fǎng)問(wèn)操作,如INDEX、TABLE等。
- 5. 排序操作符:表示對(duì)結(jié)果集進(jìn)行排序的操作,如ORDER BY、GROUP BY等。
- 6. 其他操作符:表示其他類(lèi)型的操作符,如UNION、INTERSECT等。
執(zhí)行計(jì)劃中的每個(gè)操作符都有對(duì)應(yīng)的存儲(chǔ)區(qū),用于存儲(chǔ)該操作符的執(zhí)行結(jié)果。執(zhí)行計(jì)劃中的每個(gè)操作符都有自己的任務(wù)和目的,它們通過(guò)組合形成完整的SQL語(yǔ)句執(zhí)行計(jì)劃,最終實(shí)現(xiàn)對(duì)數(shù)據(jù)的查詢(xún)和操作。
六、執(zhí)行計(jì)劃的執(zhí)行步驟
- 1. SQL解析:將SQL語(yǔ)句進(jìn)行語(yǔ)法解析,確定語(yǔ)句的語(yǔ)義和結(jié)構(gòu)。
- 2. 查詢(xún)優(yōu)化:優(yōu)化器根據(jù)SQL語(yǔ)句和數(shù)據(jù)庫(kù)的統(tǒng)計(jì)信息,選擇最優(yōu)的執(zhí)行計(jì)劃。
- 3. 執(zhí)行計(jì)劃生成:根據(jù)查詢(xún)優(yōu)化產(chǎn)生的最優(yōu)執(zhí)行計(jì)劃,生成執(zhí)行計(jì)劃樹(shù)。
- 4. 執(zhí)行計(jì)劃執(zhí)行:按照?qǐng)?zhí)行計(jì)劃樹(shù)的順序,執(zhí)行各個(gè)操作步驟,包括表掃描、索引掃描、排序、聚合等。
- 5. 結(jié)果返回:將執(zhí)行結(jié)果返回給客戶(hù)端。
- 6. 監(jiān)控和調(diào)優(yōu):根據(jù)執(zhí)行計(jì)劃的執(zhí)行情況,對(duì)性能進(jìn)行監(jiān)控和調(diào)優(yōu),如調(diào)整參數(shù)、優(yōu)化SQL語(yǔ)句等。
七、執(zhí)行計(jì)劃中各字段的描述
7.1、基本字段(總是可用的)
- Id 執(zhí)行計(jì)劃中每一個(gè)操作(行)的標(biāo)識(shí)符。如果數(shù)字前面帶有星號(hào),意味著將在隨后提供這行包含的謂詞信息
- Operation 對(duì)應(yīng)執(zhí)行的操作。也叫行源操作
- Name 操作的對(duì)象名稱(chēng)
7.2、查詢(xún)優(yōu)化器評(píng)估信息
- Rows(E-Rows) 預(yù)估操作返回的記錄條數(shù)
- Bytes(E-Bytes) 預(yù)估操作返回的記錄字節(jié)數(shù)
- TempSpc 預(yù)估操作使用臨時(shí)表空間的大小
- Cost(%CPU) 預(yù)估操作所需的開(kāi)銷(xiāo)。在括號(hào)中列出了CPU開(kāi)銷(xiāo)的百分比。注意這些值是通過(guò)執(zhí)行計(jì)劃計(jì)算出來(lái)的。
換句話(huà)說(shuō),父操作的開(kāi)銷(xiāo)包含子操作的開(kāi)銷(xiāo)
- Time 預(yù)估執(zhí)行操作所需要的時(shí)間(HH:MM:SS)
7.3、分區(qū)(僅當(dāng)訪(fǎng)問(wèn)分區(qū)表時(shí)下列字段可見(jiàn))
- Pstart 訪(fǎng)問(wèn)的第一個(gè)分區(qū)。如果解析時(shí)不知道是哪個(gè)分區(qū)就設(shè)為 KEY,KEY(I),KEY(MC),KEY(OR),KEY(SQ)
- Pstop 訪(fǎng)問(wèn)的最后一個(gè)分區(qū)。如果解析時(shí)不知道是哪個(gè)分區(qū)就設(shè)為KEY,KEY(I),KEY(MC),KEY(OR),KEY(SQ)
7.4、并行和分布式處理(僅當(dāng)使用并行或分布式操作時(shí)下列字段可見(jiàn))
- Inst 在分布式操作中,指操作使用的數(shù)據(jù)庫(kù)鏈接的名字
- TQ 在并行操作中,用于從屬線(xiàn)程間通信的表隊(duì)列
- IN-OUT 并行或分布式操作間的關(guān)系
- PQ Distrib 在并行操作中,生產(chǎn)者為發(fā)送數(shù)據(jù)給消費(fèi)者進(jìn)行的分配
7.5、運(yùn)行時(shí)統(tǒng)計(jì)(當(dāng)設(shè)定參數(shù)statistics_level為all或使用gather_plan_statistics提示時(shí),下列字段可見(jiàn))
- Starts 指定操作執(zhí)行的次數(shù)
- A-Rows 操作返回的真實(shí)記錄數(shù)
- A-Time 操作執(zhí)行的真實(shí)時(shí)間(HH:MM:SS.FF)
7.6、I/O 統(tǒng)計(jì)(當(dāng)設(shè)定參數(shù)statistics_level為all或使用gather_plan_statistics提示時(shí),下列字段可見(jiàn))
- Buffers 執(zhí)行期間進(jìn)行的邏輯讀操作數(shù)量
- Reads 執(zhí)行期間進(jìn)行的物理讀操作數(shù)量
- Writes 執(zhí)行期間進(jìn)行的物理寫(xiě)操作數(shù)量
7.7、內(nèi)存使用統(tǒng)計(jì)
- OMem 最優(yōu)執(zhí)行所需內(nèi)存的預(yù)估值
- 1Mem 一次通過(guò)(one-pass)執(zhí)行所需內(nèi)存的預(yù)估值
- 0/1/M 最優(yōu)/一次通過(guò)/多次通過(guò)(multipass)模式操作執(zhí)行的次數(shù)
- Used-Mem 最后一次執(zhí)行時(shí)操作使用的內(nèi)存量
- Used-Tmp 最后一次執(zhí)行時(shí)操作使用的臨時(shí)空間大小。這個(gè)字段必須擴(kuò)大1024倍才能和其他衡量?jī)?nèi)存的字段一致(比如,32k意味著32MB)
- Max-Tmp 操作使用的最大臨時(shí)空間大小。這個(gè)字段必須擴(kuò)大1024倍才能和其他衡量?jī)?nèi)存的字段一致(比如,32k意味著32MB)
八、查看執(zhí)行計(jì)劃語(yǔ)法
在Oracle數(shù)據(jù)庫(kù)中,可以通過(guò)使用“EXPLAIN PLAN”命令來(lái)查看查詢(xún)語(yǔ)句的執(zhí)行計(jì)劃。下面是詳細(xì)的使用方法及實(shí)例說(shuō)明:
8.1. 基本語(yǔ)法
EXPLAIN PLAN FOR SELECT * FROM table_name WHERE condition;
8.2. 查看執(zhí)行計(jì)劃
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
九、實(shí)例說(shuō)明
假設(shè)我們有一個(gè)表“employees”,包含員工的基本信息,我們要查詢(xún)薪水大于5000的員工信息。我們可以使用以下命令來(lái)查看查詢(xún)語(yǔ)句的執(zhí)行計(jì)劃:
EXPLAIN PLAN FOR SELECT * FROM employees WHERE salary > 5000;
執(zhí)行上述命令后,可以通過(guò)以下命令來(lái)查看執(zhí)行計(jì)劃:
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
查詢(xún)結(jié)果中會(huì)顯示查詢(xún)語(yǔ)句的執(zhí)行計(jì)劃,包括每個(gè)操作的類(lèi)型、所涉及的表或索引、所需的成本等信息。例如,查詢(xún)結(jié)果可能如下所示:

備注(不用上滑了,納多費(fèi)勁呀,我懂你累?。。?/strong>
- 1. ID:查詢(xún)語(yǔ)句中每個(gè)操作的唯一標(biāo)識(shí)符,可以通過(guò)ID來(lái)查看操作之間的關(guān)系。
- 2. Operation:查詢(xún)語(yǔ)句中每個(gè)操作的類(lèi)型,例如Full Table Scan、Index Scan等。
- 3. Name:表示操作所涉及的表或索引的名稱(chēng)。
- 4. Rows:表示操作所涉及的行數(shù)或估計(jì)的行數(shù)。
- 5. Bytes:表示操作所涉及的字節(jié)數(shù)或估計(jì)的字節(jié)數(shù)。
- 6. Cost:表示操作所需的成本,包括CPU成本和I/O成本。
- 7.Time:表示操作所需的時(shí)間。
解釋?zhuān)?/strong>
Full Table Scan 和 Index Scan 都是一種查詢(xún)表數(shù)據(jù)的方式。
Full Table Scan 是一種全表掃描的方法,即當(dāng)我們的查詢(xún)條件不能使用索引進(jìn)行查找時(shí),Oracle就會(huì)對(duì)整個(gè)包含了表數(shù)據(jù)的數(shù)據(jù)塊進(jìn)行掃描,從而獲取需要的數(shù)據(jù)。
Index Scan(也被稱(chēng)為Index Range Scan)則利用了表上的索引,查詢(xún)時(shí)只掃描符合指定范圍條件的索引結(jié)構(gòu),從而快速定位到匹配的記錄。如果查詢(xún)條件可以使用索引,則選擇Index Scan 可以大大提高查詢(xún)性能。
總結(jié):Full Table Scan 通常發(fā)生在沒(méi)有使用索引或索引不能完全匹配查詢(xún)條件的情況下,數(shù)據(jù)查詢(xún)速度相對(duì)較慢;Index Scan 則利用索引有序性,可快速定位滿(mǎn)足查詢(xún)條件的數(shù)據(jù)行,并且查詢(xún)速度更快。
分析以上結(jié)果:
①I(mǎi)D為0的操作為SELECT STATEMENT,表示整個(gè)查詢(xún)語(yǔ)句的執(zhí)行計(jì)劃;
②ID為1的操作為T(mén)ABLE ACCESS FULL,表示對(duì)表“employees”進(jìn)行全表掃描。
③Predicate Information (identified by operation id) 表示操作所用到的謂詞信息,其中 operation id 表示當(dāng)前操作的 ID 號(hào),謂詞信息包括過(guò)濾條件、連接條件等。
Predicate Information 中的謂詞信息對(duì)于理解 SQL 查詢(xún)的執(zhí)行計(jì)劃非常重要。它告訴我們查詢(xún)優(yōu)化器是如何使用索引、過(guò)濾條件等對(duì)數(shù)據(jù)進(jìn)行篩選和連接的。通過(guò)分析 Predicate Information,可以發(fā)現(xiàn) SQL 查詢(xún)中的性能瓶頸,從而進(jìn)行優(yōu)化。
例如:
- 如果 Predicate Information 中顯示的是 Index (range scan) 則表示查詢(xún)優(yōu)化器使用了索引進(jìn)行范圍掃描。
- 如果 Predicate Information 中顯示的是 Filter,則表示查詢(xún)優(yōu)化器使用了過(guò)濾條件來(lái)篩選數(shù)據(jù)。
- 如果 Predicate Information 中顯示的是 Join,則表示查詢(xún)優(yōu)化器使用了連接條件來(lái)連接多個(gè)表。
④1 - filter("SALARY">5000) 表示當(dāng)前操作是對(duì)表進(jìn)行過(guò)濾操作,過(guò)濾條件為 "SALARY">5000,即薪資大于 5000 的記錄。
這個(gè)操作通常出現(xiàn)在 SELECT 語(yǔ)句中,用于篩選符合條件的記錄。在執(zhí)行計(jì)劃中,這個(gè)操作通常出現(xiàn)在表掃描、索引掃描等操作之后,用于進(jìn)一步篩選數(shù)據(jù)。
在執(zhí)行計(jì)劃中,filter 操作的代價(jià)通常比較小,因?yàn)樗皇菍?duì)已經(jīng)掃描的記錄進(jìn)行進(jìn)一步篩選,而不需要進(jìn)行額外的磁盤(pán) IO 操作。但是,如果 filter 操作出現(xiàn)在操作樹(shù)的頂部,代價(jià)可能會(huì)比較大,因?yàn)樗枰x取整個(gè)表或索引,并將不符合條件的記錄過(guò)濾掉。
在 SQL 查詢(xún)的優(yōu)化過(guò)程中,通常要盡量減少 filter 操作的出現(xiàn),可以通過(guò)添加索引、修改查詢(xún)條件等方式來(lái)避免 filter 操作的出現(xiàn)。
我們可以通過(guò)這些信息來(lái)了解查詢(xún)語(yǔ)句的執(zhí)行計(jì)劃及其效率,從而進(jìn)行優(yōu)化。
十、PLSQL Developer中的F5
依舊是查詢(xún)表“employees”薪水大于5000的員工信息,我們可以使用快捷鍵F5來(lái)查看查詢(xún)語(yǔ)句的執(zhí)行計(jì)劃,如下圖所示:




通過(guò)切換不同的展示格式,我們可以看到各種信息,但是展示結(jié)果與使用explain plan for語(yǔ)句是一樣的,這種方式可以更加的快捷方便!
上面的例子相對(duì)來(lái)說(shuō)展示結(jié)果比較單一,接下來(lái)舉用下面的例子再描述以下,已知員工表employees和部門(mén)表departments,現(xiàn)要求查詢(xún)出員工薪資為6000的員工信息和部門(mén)信息,我們可以用快捷鍵F5查看下他的執(zhí)行計(jì)劃:

①在上途中我們發(fā)現(xiàn)TABLE ACCESS FULL 時(shí),通常意味著該查詢(xún)使用了 Full Table Scan 的方式來(lái)訪(fǎng)問(wèn)表。上面有提到了這個(gè)方式,但我還是要再?lài)Z叨一下:
Full Table Scan 是一種全表掃描的方法,即當(dāng)我們的查詢(xún)條件不能使用索引進(jìn)行查找時(shí),Oracle就會(huì)對(duì)整個(gè)包含了表數(shù)據(jù)的數(shù)據(jù)塊進(jìn)行掃描,從而獲取需要的數(shù)據(jù)。此時(shí), Oracle 就會(huì)選擇使用 TABLE ACCESS FULL 操作符。
如果查詢(xún)中使用了 TABLE ACCESS FULL 而沒(méi)有使用索引,則可能導(dǎo)致查詢(xún)速度相對(duì)較慢,對(duì)于較大的表來(lái)說(shuō),這種方法可能會(huì)產(chǎn)生很高的 I/O 成本和 CPU 成本,不利于系統(tǒng)性能。
注意:
在實(shí)際應(yīng)用中,盡可能避免使用 Full Table Scan,可以考慮使用合適的索引或優(yōu)化查詢(xún)語(yǔ)句等方式提高查詢(xún)性能。
②在執(zhí)行計(jì)劃中,還發(fā)現(xiàn)了INDEX UNIQUE SCAN ,它表示對(duì)于一個(gè)唯一索引或主鍵索引的范圍查找方式。
當(dāng)查詢(xún)語(yǔ)句中包含了對(duì)唯一索引或主鍵索引字段的等值(=)條件時(shí),在執(zhí)行計(jì)劃中就會(huì)顯示 Index Unique Scan 操作。這種方法可以非??焖俚囟ㄎ坏叫枰樵?xún)的行,并且不會(huì)產(chǎn)生重復(fù)數(shù)據(jù)輸出。
與普通索引掃描不同的是,Index Unique Scan 確保查詢(xún)結(jié)果最多只有一行記錄,因?yàn)槲ㄒ凰饕蛑麈I索引本身就定義了數(shù)據(jù)行的唯一性。因此,如果我們可以通過(guò)索引的方式找到精確匹配的數(shù)據(jù),則最好使用 INDEX UNIQUE SCAN 以提高查詢(xún)效率。
總之,Index Unique Scan 是一種高效的查詢(xún)方式,適用于對(duì)于唯一索引或主鍵索引進(jìn)行查詢(xún)的場(chǎng)景。同時(shí),建立合適的索引也是提高查詢(xún)性能的重要手段之一。
③在執(zhí)行計(jì)劃中,還發(fā)現(xiàn)了TABLE ACCESS BY INDEX ROWID ,它表示通過(guò)索引行 ID 進(jìn)行表數(shù)據(jù)訪(fǎng)問(wèn)的操作。一般而言,使用該操作符需要經(jīng)過(guò)以下步驟:
- 1. 根據(jù)查詢(xún)語(yǔ)句中的條件,找到合適的索引;
- 2. 使用索引查找所需的數(shù)據(jù)行的 Rowid;
- 3. 根據(jù) Step 2 中獲取的 Rowid 值,從表中取出對(duì)應(yīng)的數(shù)據(jù)行。
這個(gè)操作符與其他操作符最大的區(qū)別在于,它不是針對(duì)索引進(jìn)行數(shù)據(jù)訪(fǎng)問(wèn),而是針對(duì)實(shí)際的數(shù)據(jù)表進(jìn)行訪(fǎng)問(wèn)。因此,TABLE ACCESS BY INDEX ROWID 可以通過(guò)索引快速定位到需要的數(shù)據(jù)行,并根據(jù) Rowid 直接訪(fǎng)問(wèn)表數(shù)據(jù),從而提高查詢(xún)的效率。
注意:
在使用 TABLE ACCESS BY INDEX ROWID 時(shí),如果表的數(shù)據(jù)分散在多個(gè)磁盤(pán)塊中,就可能會(huì)產(chǎn)生很高的 I/O 成本和 CPU 成本,導(dǎo)致查詢(xún)性能下降。因此,在進(jìn)行優(yōu)化時(shí),應(yīng)盡量避免物理磁盤(pán) IO 操作的數(shù)量,可以通過(guò)內(nèi)存或者調(diào)整磁盤(pán)布局等方式來(lái)改善性能。
④在本文章的第四節(jié)【四、執(zhí)行計(jì)劃的執(zhí)行順序】提到了執(zhí)行順序,那么我們?cè)谏蠄D的樹(shù)結(jié)構(gòu)--耗費(fèi)就可以知道他們的執(zhí)行順序是怎樣排序的,如果不清楚,我們九可以點(diǎn)擊圖中標(biāo)記的三角提示進(jìn)行查看。

通過(guò)HTML框圖我們可以清楚知道索引掃描的索引名字,全表掃描的表名,分別掃描了多少行,預(yù)估多少個(gè)字節(jié),CPU的消耗和操作執(zhí)行消耗的時(shí)間等信息。

文本圖的展示與explain plan for語(yǔ)句執(zhí)行結(jié)果大致一樣,不再過(guò)多描述。

上面也有展示了此圖,大家一定很好奇它是干什么的,哈哈哈?。?!不急,下面給你簡(jiǎn)單描述一下情況!
在 Oracle SQL Developer 中,使用快捷鍵 F5 可以查看 SQL 語(yǔ)句的執(zhí)行計(jì)劃。這個(gè)操作會(huì)打開(kāi)一個(gè)新窗口,展示查詢(xún) SQL 的執(zhí)行計(jì)劃圖表與一些統(tǒng)計(jì)信息。
如果我們?cè)趫?zhí)行計(jì)劃窗口中選擇了“Explain Plan(XML Format)”,那么窗口下方將會(huì)展示該查詢(xún)語(yǔ)句的 XML 執(zhí)行計(jì)劃,其中包括了多個(gè)執(zhí)行計(jì)劃步驟及其相應(yīng)的輸入、輸出參數(shù)和所涉及的對(duì)象等信息。
Oracle 數(shù)據(jù)庫(kù)管理系統(tǒng)使用 XML 格式來(lái)表示執(zhí)行計(jì)劃,這種格式的優(yōu)點(diǎn)是可讀性好,易于在不同平臺(tái)之間進(jìn)行傳輸和共享。通過(guò)查看 XML 執(zhí)行計(jì)劃,我們可以更深入地了解查詢(xún)的執(zhí)行細(xì)節(jié),幫助我們分析和優(yōu)化查詢(xún)性能問(wèn)題。
到此這篇關(guān)于Oracle查看執(zhí)行計(jì)劃的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Oracle查看執(zhí)行計(jì)劃內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
講解Oracle數(shù)據(jù)庫(kù)中的數(shù)據(jù)字典及相關(guān)SQL查詢(xún)用法
這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)中的數(shù)據(jù)字典及相關(guān)SQL查詢(xún)用法,是Oracle入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-03-03
詳解Oracle數(shù)據(jù)庫(kù)各類(lèi)控制語(yǔ)句的使用
本文我們主要介紹了Oracle數(shù)據(jù)庫(kù)中各種控制語(yǔ)句的使用,包括邏輯控制語(yǔ)句、Case when的使用、While的使用以及For的使用等,希望本次的介紹能夠?qū)δ兴斋@!2015-09-09
oracle 監(jiān)聽(tīng) lsnrctl 命令 (推薦)
這篇文章主要介紹了oracle 監(jiān)聽(tīng) lsnrctl 命令 ,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03
ORACLE應(yīng)用經(jīng)驗(yàn)(2)
ORACLE應(yīng)用經(jīng)驗(yàn)(2)...2007-03-03
Oracle rac環(huán)境的數(shù)據(jù)庫(kù)導(dǎo)入操作步驟
Oracle RAC是一種基于共享存儲(chǔ)和共享數(shù)據(jù)庫(kù)的集群解決方案,可以將多個(gè) Oracle 數(shù)據(jù)庫(kù)實(shí)例連接成一個(gè)邏輯上的單一數(shù)據(jù)庫(kù),提供高可用性、靈活性和可伸縮性,本文給大家介紹Oracle rac環(huán)境的數(shù)據(jù)庫(kù)導(dǎo)入操作,感興趣的朋友一起看看吧2023-06-06
Oracle ASM故障數(shù)據(jù)恢復(fù)解決方案
在本篇文章里小編給大家整理的是關(guān)于Oracle ASM故障數(shù)據(jù)恢復(fù)解決方案以及相關(guān)知識(shí)點(diǎn),有需要的朋友們參考下。2019-11-11
安裝Oracle加載數(shù)據(jù)庫(kù)錯(cuò)誤areasQueries的解決
安裝Oracle加載數(shù)據(jù)庫(kù)錯(cuò)誤areasQueries的解決...2007-03-03
如何使用GDAL庫(kù)的ogr2ogr將GeoJSON數(shù)據(jù)導(dǎo)入到PostgreSql中
本文主要介紹了PyTorch中的masked_fill函數(shù)的基本知識(shí)和使用方法,masked_fill函數(shù)接受一個(gè)輸入張量和一個(gè)布爾掩碼作為主要參數(shù),掩碼的形狀必須與輸入張量相同,掩碼操作根據(jù)掩碼中的布爾值在輸出張量中填充指定的值或保留輸入張量中的值2024-10-10
解決ORA-01747:user.table.column,table.column或列說(shuō)明無(wú)效
這篇文章主要介紹了解決ORA-01747:user.table.column,table.column或列說(shuō)明無(wú)效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Oracle數(shù)據(jù)庫(kù)兩表關(guān)聯(lián)更新的問(wèn)題
需要寫(xiě)一個(gè)更新語(yǔ)句,但是更新的判斷條件是兩個(gè)表關(guān)聯(lián)查詢(xún)出來(lái)的,本文通過(guò)實(shí)例代碼給大家講解Oracle數(shù)據(jù)庫(kù)兩表關(guān)聯(lián)更新的問(wèn)題及遇到的坑,感興趣的朋友一起看看吧2023-11-11

