根据索引的类型与where限制条件的不同,有4种类型的索引扫描:
K!B"`LgjP}0 索引唯一扫描(index unique scan)Q%}6w*M)j"JV5W+I0
rXI\;Fh0 索引范围扫描(index range scan)51Testing软件测试网PoB/gM-Ty
['F)M0RLE/Y0 索引全扫描(index full scan)51Testing软件测试网zsJc(J
KE-D$Dr+S0 索引快速扫描(index fast full scan)z'Z$re_,O/a)^n0
Ti,`~jp_"z0 (1) 索引唯一扫描(index unique scan)51Testing软件测试网:bX)lEc"j7p
(S_9I?,T0 通过唯一索引查找一个数值经常返回单个ROWID.如果存在UNIQUE 或PRIMARY KEY 约束(它保证了语句只存取单行)的话,Oracle经常实现唯一性扫描。c$m*nXO"f3wxQ051Testing软件测试网x8h'Z?je
使用唯一性约束的例子:5M1ECuo[#GA"Q051Testing软件测试网j]&}$|]@;H v,_
SQL> explain plan for51Testing软件测试网]:a*AfSLc51Testing软件测试网Q G)fH{$}
select empno,ename from emp where empno=10;51Testing软件测试网6p3i6A4N LmUk51Testing软件测试网b,Sb&vs;B
Query Plan*jT-k$}SN
v.J3PC0
J/bf/uQt!e0------------------------------------51Testing软件测试网#c'kZMVS51Testing软件测试网 c2]S8C`@
SELECT STATEMENT [CHOOSE] Cost=1Zav^+FF/y]ZZ0
-xy BB9?UZd0 TABLE ACCESS BY ROWID EMP [ANALYZED]51Testing软件测试网I-UY*K&bp3N
(F'|N-}7Vz%~8s9l0 INDEX UNIQUE SCAN EMP_I151Testing软件测试网y U7P0jn-~$^1a$f51Testing软件测试网`_A(jf zo4A
(2) 索引范围扫描(index range scan)B$Rz H;S{c#P+}0
.}G&O6d(I%h+Y0 使用一个索引存取多行数据,在唯一索引上使用索引范围扫描的典型情况下是在谓词(where限制条件)中使用了范围操作符(如>、、>=、<=、between)51Testing软件测试网"UY3VZ#?
~{8|4a MC4I;M$ts0 使用索引范围扫描的例子:51Testing软件测试网:d!t+Owv51Testing软件测试网t;_bCzw0f
SQL> explain plan for select empno,ename from emp51Testing软件测试网z3jhU\g-U,nI51Testing软件测试网.~(vN]-SJvBnFB+qF
where empno > 7876 order by empno;51Testing软件测试网aqC_z5i?#F
1l#j&\~1S2d$q*Q)e0}0 Query Plan51Testing软件测试网+^g0}mNcR#h-F#J51Testing软件测试网/W"}$M!p"|b
--------------------------------------------------------------------------------#s+H#xdK2nY051Testing软件测试网t_5@1I3r;[
SELECT STATEMENT[CHOOSE] Cost=151Testing软件测试网1k,RQ{V'v{V51Testing软件测试网)mz;tp;g+j,j#x
TABLE ACCESS BY ROWID EMP [ANALYZED],z1M"e&e#E;L;s0
AS$L7XL+MX}q4sYr0 INDEX RANGE SCAN EMP_I1 [ANALYZED]51Testing软件测试网0UM
C,|.e[Z
/\5CO7J)iO_]5E+CnHp0 在非唯一索引上,谓词col = 5可能返回多行数据,所以在非唯一索引上都使用索引范围扫描。2a;_k \7S0
4n_'dF?sA pk0 使用index rang scan的3种情况:51Testing软件测试网O#j1Y
V*Om&[
-i0T Uwrv0s-x0 (a) 在唯一索引列上使用了range操作符(> < <> >= <= between)51Testing软件测试网/Tk-Uce:g
H8tI`'LN0 (b) 在组合索引上,只使用部分列进行查询,导致查询出多行51Testing软件测试网
Y"t%t%I*_$]$FC51Testing软件测试网6w)}ME%Ng$BT`R/b
(c) 对非唯一索引列上进行的任何查询。51Testing软件测试网p Qx"tHQ*G51Testing软件测试网TViT%I.e9s-QY,Z
(3) 索引全扫描(index full scan)Y6O8o-]:Q4A#d |3E0
w"`;~Jd)^2_0 与全表扫描对应,也有相应的全索引扫描。而且此时查询出的数据都必须从索引中可以直接得到。-i-Gj|4S;\Zl051Testing软件测试网+te)bD)\juD
全索引扫描的例子:51Testing软件测试网0K8sq\vm9G
uaR5xRf"`0 An Index full scan will not perform single block i/o''s and so it may prove to be inefficient.51Testing软件测试网v%|!w2w:R
aV51Testing软件测试网8yH'^5c%M5{/?\5b
e.g.51Testing软件测试网@ }j[+S-\9?;W*}H_51Testing软件测试网&e'_qW~#@C2o$n
Index BE_IX is a concatenated index on big_emp (empno, ename)51Testing软件测试网ZU(t9z{`Jf
_e'I*coLy0 SQL> explain plan for select empno, ename from big_emp order by empno,ename;3T/L6e{&Q0
!tp;Cb+e|*q0 Query Planw4r0a.NbCf"U3Bu0
&ll.Qt{"X3W0--------------------------------------------------------------------------------51Testing软件测试网p!s8?g#R[2CE
Ng.[&H5BU~l0 SELECT STATEMENT[CHOOSE] Cost=2651Testing软件测试网+fpm$S@y z
rANE&OI0 INDEX FULL SCAN BE_IX [ANALYZED]51Testing软件测试网wrrp&I$|d8m9d
LM$ulz0 (4) 索引快速扫描(index fast full scan)iHvD0t!C$GM051Testing软件测试网!v-g(l!C/Z{ }hk
扫描索引中的所有的数据块,与 index full scan很类似,但是一个显著的区别就是它不对查询出的数据进行排序,即数据不是以排序顺序被返回。在这种存取方法中,可以使用多块读功能,也可以使用并行读入,以便获得最大吞吐量与缩短执行时间。51Testing软件测试网 TWzE:gN+G51Testing软件测试网)X2f/Eg8i"|
索引快速扫描的例子:7T}^kzt0f5T0
D:l|4pT&uK0 BE_IX索引是一个多列索引: big_emp (empno,ename)Xe*TM;[051Testing软件测试网UG&H3[T
SQL> explain plan for select empno,ename from big_emp;{e/}0XxXg051Testing软件测试网4_)uR"l9Y
Query PlanH(u)yg^ sJs051Testing软件测试网qL2E7k U0F0_w.h\&L)|
------------------------------------------51Testing软件测试网v8pc7k Sv7m
"Qqx/?'irw[5^0 SELECT STATEMENT[CHOOSE] Cost=1{S*Ug!W/pINQA051Testing软件测试网 V^\vXt"r#Q%l
INDEX FAST FULL SCAN BE_IX [ANALYZED]/w)oz?J0V0
0|.GAY)j:Y0 只选择多列索引的第2列:l!pq~+n0
h9\G7o}9s*t$Jj0 SQL> explain plan for select ename from big_emp;3d3@z){B5eL(Z-S051Testing软件测试网@dpxCcp
Query Plan51Testing软件测试网|2bYj8w\M*hJ
Y-SY{C6_'S*w1{En0------------------------------------------!~$?2H4n[2l*nw051Testing软件测试网#ZDlLQ
SELECT STATEMENT[CHOOSE] Cost=151Testing软件测试网%f/i3` b*@9WY,VW7r!_a E51Testing软件测试网2p
Bd"?R!wH3s
INDEX FAST FULL SCAN BE_IX [ANALYZED]51Testing软件测试网'wJa9E8sSa