Oracle查看SQL執行計劃,分析SQL性能

如何查看SQL執行計劃

    使用 PL/SQL 查看,具體使用方法以下:sql

  • 新建 解釋計劃窗口 ,將 SQL 複製進去執行,便可顯示執行計劃。
    解釋計劃窗口數據庫

  • 選中 SQL 語句,點擊菜單 工具-解釋計劃 或 按快捷鍵 F5oracle

執行計劃結果說明

表掃描

table access by index rowid

經過ROWID的表存取,一次I/O只能讀取一個數據塊。經過rowid讀取表字段,rowid多是索引鍵值上的rowid工具

table access full

全表掃描,對全部表中記錄進行掃描。表字段不涉及索引時每每採用這種方式,此時效率最低。oop

索引掃描

index unique scan

索引惟一掃描,若是表字段有 UNIQUEPRIMARY KEY 約束,Oracle實現索引惟一掃描,這種掃描方式條件比較極端,出現比較少。性能

index range scan

索引範圍掃描,最多見的索引掃描方式。在非惟一索引上都使用索引範圍掃描,具體以下:優化

  • 在惟一索引列上使用瞭如下圈定範圍的操做符(> < <> >= <= between等)
  • 在組合索引上,只使用部分列進行查詢,致使查詢出多行
  • 對非惟一索引列上進行的任何查詢
index full scan

索引全掃描,這種狀況下,是查詢的數據都屬於索引字段,通常都含有排序操做。code

index fast full scan

索引快速掃描,若是查詢的數據都屬於索引字段,而且沒有進行排序操做,那麼是屬於這種狀況。條件比較極端,出現比較少。排序

index range scan

索引範圍掃描,最多見的索引掃描方式。在非惟一索引上都使用索引範圍掃描。索引

index range scan

索引範圍掃描,最多見的索引掃描方式。在非惟一索引上都使用索引範圍掃描。

錶鏈接

排序合併鏈接(Sort Merge Join)
  • 對於非等值鏈接,這種鏈接方式的效率是比較高的。

  • 若是在關聯的列上都有索引,效果更好。

  • 對於將2個較大的row source作鏈接,該鏈接方法比Nested Loops鏈接要好一些。

  • 可是若是sort merge返回的row source過大,則又會致使使用過多的rowid在表中查詢數據時,數據庫性能降低,由於過多的I/O.

嵌套循環(Nested Loops)
  • 若是driving row source(外部表)比較小,而且在inner row source(內部表)上有惟一索引,或有高選擇性非惟一索引時,使用這種方法能夠獲得較好的效率。

  • NESTED LOOPS有其它鏈接方法沒有的的一個優勢是:能夠先返回已經鏈接的行,而沒必要等待全部的鏈接操做處理完才返回數據,這能夠實現快速的響應時間。

哈希鏈接(Hash Join)
  • 這種方法是在oracle7後來引入的,使用了比較先進的鏈接理論,通常來講,其效率應該好於其它2種鏈接,可是這種鏈接只能用在CBO優化器中,並且須要設置合適的hash_area_size參數,才能取得較好的性能。

  • 在2個較大的row source之間鏈接時會取得相對較好的效率,在一個row source較小時則能取得更好的效率。

  • 只能用於等值鏈接

相關文章
相關標籤/搜索