ORACLE9i新特性—索引跳躍式掃描
2024-08-29 13:39:39
供稿:網(wǎng)友
索引跳躍式掃描(index skip scan)是Oracle9i用來(lái)提高性能的新特性,對(duì)于使用復(fù)合索引的數(shù)據(jù)庫(kù)應(yīng)用程序意義尤為重大。
復(fù)合索引(又稱為連接索引)是一個(gè)包含多個(gè)字段的索引。在ORACLE9i以前的ORACLE版本里,只有那些在WHERE子句里引用整個(gè)索引或者是引用索引的一個(gè)或多個(gè)前導(dǎo)字段的查詢,才能使復(fù)合索引有效而提高檢索效率。而在ORACLE9i里,一個(gè)復(fù)合索引即使在一次查詢中沒(méi)有使用前導(dǎo)字段,也可能通過(guò)“索引跳躍式掃描”被有效引用。在一次跳躍式掃描中,每個(gè)復(fù)合索引前導(dǎo)字段的獨(dú)特值(DISTINCT VALUE)只會(huì)被搜索一次,ORACLE9i會(huì)在復(fù)合索引前導(dǎo)字段每個(gè)獨(dú)特值區(qū)間結(jié)合WHERE子句中的其它復(fù)合索引字段搜索符合條件的目標(biāo)記錄,這種做法的結(jié)果導(dǎo)致了在索引中的跳躍式掃描。
索引跳躍式掃描主要有兩個(gè)優(yōu)點(diǎn):
1、以前版本中的表掃描(TABLE SCAN)可能會(huì)轉(zhuǎn)變?yōu)樗饕龗呙瑁岣吡四承┎樵兊膱?zhí)行效率;
2、應(yīng)用程序使用較少的索引就能達(dá)到提高效能的目的,并且既節(jié)省存儲(chǔ)空間,又能提高DML和維護(hù)操作的效率。
假設(shè)有一個(gè)汽車注冊(cè)信息的表,包含了250萬(wàn)條紀(jì)錄,結(jié)構(gòu)如下:
REGISTERED_OWNERS
(STATE VARCHAR2(2) NOT NULL,
REGISTRATION# VARCHAR2(10) NOT NULL,
FIRST_NAME VARCHAR2(30),
LAST_NAME VARCHAR2(30),
MAKE VARCHAR2(30),
MODEL VARCHAR2(15),
YEAR_MFG NUMBER,
CITY VARCHAR2(30),
ZIP NUMBER)
進(jìn)一步假設(shè)在字段(STATE,REGISTRATION#)上存在一個(gè)復(fù)合索引,那么下面語(yǔ)句的執(zhí)行速度會(huì)有很大提高:
SELECT first_name, last_name, zip FROM REGISTERED_OWNERS
WHERE registration# = '4FBB428'
使用索引查詢速度大約可以提高90倍,在ORACLE8i(索引跳躍式掃描)中,這個(gè)查詢需要21.42秒,而同樣的硬件配置使用ORACLE9i只需要0.24秒。
索引跳躍式掃描非常有效,對(duì)用戶和應(yīng)用程序而言是透明的,并且不需要使用額外的新索引就能提高數(shù)據(jù)庫(kù)的性能,有些時(shí)候甚至可以答應(yīng)移除某些索引而不會(huì)對(duì)性能有太大影響。