新聞中心
再實(shí)際操作中我們?yōu)榱藢?shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)關(guān)于增加SQL優(yōu)化查詢(xún)智能的保證,Oracle 9i增強(qiáng)了全索引,SQL執(zhí)行計(jì)劃以支持基于功能的相關(guān)索引(function-based index)。在Oracle 8i中,SQL優(yōu)化器添加了判斷查詢(xún)是否可以專(zhuān)門(mén)用一個(gè)現(xiàn)存的索引來(lái)解決的智能。

創(chuàng)新互聯(lián)建站專(zhuān)注于網(wǎng)站制作、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)。公司秉持“客戶(hù)至上,用心服務(wù)”的宗旨,從客戶(hù)的利益和觀點(diǎn)出發(fā),讓客戶(hù)在網(wǎng)絡(luò)營(yíng)銷(xiāo)中找到自己的駐足之地。尊重和關(guān)懷每一位客戶(hù),用嚴(yán)謹(jǐn)?shù)膽B(tài)度對(duì)待客戶(hù),用專(zhuān)業(yè)的服務(wù)創(chuàng)造價(jià)值,成為客戶(hù)值得信賴(lài)的朋友,為客戶(hù)解除后顧之憂(yōu)。
一旦存在索引,Oracle就會(huì)繞過(guò)對(duì)表的訪(fǎng)問(wèn),索引組織表(index-organized table,IOT)結(jié)構(gòu)就是一個(gè)例子。
在IOT結(jié)構(gòu)中,所有的數(shù)據(jù)都載入索引的b-樹(shù)結(jié)構(gòu),這樣表(table)就成為一個(gè)多余的東西了。
一旦Oracle SQL優(yōu)化器檢測(cè)到查詢(xún)無(wú)需訪(fǎng)問(wèn)表時(shí),Oracle就調(diào)用全索引掃描并快速讀取每一個(gè)索引塊而無(wú)需接觸表本身。有一點(diǎn)很重要:全索引掃描并沒(méi)有讀取索引節(jié)點(diǎn),而是一塊一塊的執(zhí)行掃描并快速捕獲索引節(jié)點(diǎn)。***,Oracle調(diào)用多塊讀取功能,調(diào)用多個(gè)過(guò)程來(lái)讀取表。
Oracle和多塊讀取
為了加快表和索引的訪(fǎng)問(wèn)速度,Oracle使用了db_file_multiblock_read_count參數(shù)(默認(rèn)參數(shù)為8)來(lái)輔助把全表掃描和Oracle 9i全索引掃描所獲得的數(shù)據(jù)塊盡快送到數(shù)據(jù)緩沖區(qū)中。然而,這個(gè)參數(shù)只有當(dāng)SQL查詢(xún)執(zhí)行全表掃描時(shí)才可用,并且,在絕大多數(shù)情況下,查詢(xún)要使用索引來(lái)訪(fǎng)問(wèn)表。
Oracle對(duì)全索引掃描有如下限制:
SQL請(qǐng)求的全部列(column)必須駐留在索引樹(shù)中;也就是說(shuō),SELECT和WHERE字句中的所有數(shù)據(jù)列必須存在于索引中。
查詢(xún)?cè)L問(wèn)大量的行(row)。根據(jù)你查詢(xún)的范圍,比例變化范圍為10%到25%之間,這個(gè)比例參數(shù)db_file_multiblock_read_count的設(shè)置和查詢(xún)的并行程度極大的影響到這個(gè)比例。
由于索引節(jié)點(diǎn)并沒(méi)有按索引順序排列,所以列并沒(méi)有順序。這樣,ORDER BY字句將要求附加的排序操作。
Oracle提供了一個(gè)SQL提示(hint)來(lái)強(qiáng)制Oracle 9i全索引掃描。你也可以通過(guò)指定index_ffs提示來(lái)強(qiáng)制快速索引掃描,這常常與parallel_index提示組合來(lái)提高性能。例如,下面的查詢(xún)強(qiáng)迫使用并行快速全索引掃描:
- select distinct /*+ index_ffs(c,pk_auto) parallel_index_
- (automobile, pk_auto) color, count(*)
- from
- automobiles
- group by color;
由于涉及了所有的變量,所以全索引是否會(huì)加快查詢(xún)速度并不能簡(jiǎn)單的加以回答。所以,大多數(shù)有經(jīng)驗(yàn)的SQL調(diào)試者(tuner)會(huì)對(duì)符合快速Oracle 9i全索引掃描標(biāo)準(zhǔn)的查詢(xún)進(jìn)行手工計(jì)時(shí),看看使用全索引掃描的反映時(shí)間是否會(huì)降低。
【編輯推薦】
- Oracle動(dòng)態(tài)Web開(kāi)發(fā)實(shí)例演示
- 轉(zhuǎn)移Oracle海量數(shù)據(jù)到另外的用戶(hù)流程
- Oracle內(nèi)存結(jié)構(gòu)里Process Memory實(shí)際操作步驟
- Oracle同時(shí)訪(fǎng)問(wèn)N個(gè)SQL Server的實(shí)操
- Oracle細(xì)粒度如何進(jìn)行訪(fǎng)問(wèn)
新聞標(biāo)題:如何用Oracle9i全索引掃描完成任務(wù)
瀏覽路徑:http://www.5511xx.com/article/cosoesj.html


咨詢(xún)
建站咨詢(xún)
