SQL 執行計畫結果核心字段意思

2021-09-26 06:26:53 字數 1281 閱讀 9492

index unique scan(索引唯一掃瞄)

通過唯一索引查詢乙個數值經常返回單個rowid。如果該唯一索引有多個列組成(即組合索引),則至少要有組合索引的引導列參與到該查詢中,如建立乙個索引:create index idx_test on emp(ename, deptno, loc)。則select ename from emp where ename = 『jack』 and deptno = 『dev』語句可以使用該索引。如果該語句只返回一行,則訪問方法稱為索引唯一掃瞄。而select ename from emp where deptno = 『dev』語句則不會使用該索引,因為where子句種沒有引導列。如果存在unique 或primary key 約束(它保證了語句只訪問單行)的話,oracle經常實現唯一性掃瞄。

index range scan(索引範圍掃瞄):

1.對於unique index來說,如果where 條件後面出現了<,> ,between …and…的時候,那麼就可能執行index range scan,如果where條件後面是=,那麼就會執行index unique scan。

2.對於none unique index來說 如果where 條件後面出現了=,>,<,betweed…and…的時候,就有可能執行index range scan。

3.對於組合索引來說,如果where條件後面出現了組合索引的引導列,那麼可能執行index range scan。

index full scan(索引全掃瞄)

與全表掃瞄對應,也有相應的全oracle索引掃瞄。在某些情況下,可能進行全oracle索引掃瞄而不是範圍掃瞄,需要注意的是全oracle索引掃瞄只在cbo模式下才有效。 cbo根據統計數值得知進行全oracle索引掃瞄比進行全表掃瞄更有效時,才進行全oracle索引掃瞄,而且此時查詢出的資料都必須從索引中可以直接得到。

index fast full scan(索引快速全掃瞄):

如果select 語句後面中的列都被包含在組合索引中,而且where後面沒有出現組合索引的引導列,並且需要檢索出大部分資料,那麼這個時候可能執行index fast full scan。index fast full scan 發生的條件:

1.必須是組合索引。

2.引導列不在where條件中

index skip scan(索引跳躍式掃瞄)

當查詢可以通過組合索引得到結果,而且返回結果很少,並且where條件中沒有包含索引引導列的時候,可能執行index skip scan

索引跳躍式掃瞄發生的條件:

1.必須是組合索引。

2.引導列沒有出現在where條件中

SQL執行計畫

引言 實際專案開發中,由於我們不知道實際查詢的時候資料庫裡發生了什麼事情,資料庫軟體是怎樣掃瞄表 怎樣使用索引的,因此,我們能感知到的就只有 sql語句執行的時間,在資料規模不大時,查詢是瞬間的,因此,在寫sql語句的時候就很少考慮到效能的問題。但是當資料規模增大,如千萬 億的時候,我們運 行同樣的...

SQL 執行計畫

使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是如何處理你的sql語句的。分析你的查詢語句或是表結構的效能瓶頸 l 表的讀取順序 l 資料讀取操作的操作型別 l 哪些索引可以使用 l 哪些索引被實際使用 l 表之間的引用 l 每張表有多少行被優化器查詢 explian ...

Sql優化 執行計畫

一段sql 寫好以後,可以通過檢視sql的執行計畫,初步 該sql在執行時的效能好壞,尤其是在發現某個sql語句的效率較差時,我們可以通過檢視執行計畫,分析出該sql 的問題所在。1 開啟熟悉的檢視工具 pl sql developer。在pl sql developer中寫好一段sql 後,按f5...