Oracle數(shù)據(jù)庫優(yōu)化培訓(xùn)ppt課件_第1頁
Oracle數(shù)據(jù)庫優(yōu)化培訓(xùn)ppt課件_第2頁
Oracle數(shù)據(jù)庫優(yōu)化培訓(xùn)ppt課件_第3頁
Oracle數(shù)據(jù)庫優(yōu)化培訓(xùn)ppt課件_第4頁
Oracle數(shù)據(jù)庫優(yōu)化培訓(xùn)ppt課件_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、ORACLE數(shù)據(jù)庫SQL優(yōu)化培訓(xùn)軟件一部2021年9月培訓(xùn)內(nèi)容 主要引見與SQL調(diào)整有關(guān)的內(nèi)容,內(nèi)容涉及多個方面: 1.SQL語句執(zhí)行的過程 2.ORACLE優(yōu)化器 3.表之間的關(guān)聯(lián) 4.如何得到SQL執(zhí)行方案 5.如何分析執(zhí)行方案等內(nèi)容.背景知識 在調(diào)整之前我們需求了解一些背景知識,只需知道這些背景知識,我們才干更好的調(diào)整sql語句 SQL語句處置的根本過程,主要包括: 查詢語句處置 DML語句處置(insert, update, delete) DDL 語句處置(create . , drop . , alter . , ) 事務(wù)控制(commit, rollback) .優(yōu)化原理 作為關(guān)

2、系數(shù)據(jù)庫管理系統(tǒng),要處理的一個重要問題就是如何提高查詢的效率,即所謂的查詢優(yōu)化。為什么會出現(xiàn)這個問題呢?我們知道SQL言語是一種非過程化的言語,即它只需用戶指出“做什么,而不需指出“如何做,這樣對用戶來說確實方便了,但系統(tǒng)的負(fù)擔(dān)就重了。系統(tǒng)要完成“如何做,就必然有個選擇、比較、權(quán)衡的過程,即如何選擇最正確的存取途徑和實現(xiàn)算法。.什么是優(yōu)化器 查詢優(yōu)化對提高查詢效率是至關(guān)重要的,在任何一個商品化的RDBMS中,都必需有一個專門擔(dān)任查詢語句優(yōu)化的程序,稱為優(yōu)化器;是SQL之前分析語句的工具 。 優(yōu)化器的優(yōu)化方式: 基于規(guī)那么RBO: 優(yōu)化器遵照Oracle內(nèi)部預(yù)定的規(guī)那么 基于代價CBO: 根據(jù)語

3、句執(zhí)行的代價,主要指對CPU和內(nèi)存的占用。優(yōu)化器在判別能否運用CBO時,要參照表和索引的統(tǒng)計信息。統(tǒng)計信息要在對表做analyze后才會有。 .優(yōu)化器的優(yōu)化方式 Oracle優(yōu)化器的優(yōu)化方式主要有四種: Rule:基于規(guī)那么; Choose:默許方式。根據(jù)表或索引的統(tǒng)計信息,假設(shè)有統(tǒng)計信息,那么運用CBO方式;假設(shè)沒有統(tǒng)計信息,相應(yīng)列有索引,那么運用RBO方式。 First rows:與Choose類似。不同的是假設(shè)表有統(tǒng)計信息,它將以最快的方式前往查詢的前幾行,以獲得最正確呼應(yīng)時間。 All rows:即完全基于Cost的方式。當(dāng)一個表有統(tǒng)計信息時,以最快方式前往表一切行,以獲得最大吞吐量。

4、沒有統(tǒng)計信息那么運用RBO方式。 .優(yōu)化方式的選擇指定優(yōu)化方式CBO/RBO優(yōu)化方式為默許選擇方式 Choose 情況下,怎樣樣才干知道SQL是基于代價CBO查詢,還是基于規(guī)那么RBO查詢。COST無值闡明運用基于規(guī)那么RBO方式COST有值闡明運用基于代價CBO方式.COST 闡明什么COST是什么? cost屬性的值是一個在oracle內(nèi)部用來比較各個執(zhí)行方案所耗費(IOCPU)的代價的值,從而使優(yōu)化器可以選擇最好的執(zhí)行方案。不同語句的cost值不具有可比性,只能對同一個語句的不同執(zhí)行方案的cost值進(jìn)展比較,越小越好。.程序員的要求 ORACLE系統(tǒng)中的優(yōu)化器做的比較簡單,因此這就要求用

5、戶要有較強的優(yōu)化認(rèn)識。程序員要想獲得較優(yōu)的查詢性能,就必需對表的大小、索引的選擇率以及更新和存取操作的頻度等統(tǒng)計信息了如指掌。ORACLE優(yōu)化對程序員的要求:.優(yōu)化原理優(yōu)化通常有兩方面的內(nèi)容,即邏輯優(yōu)化和物理優(yōu)化。邏輯優(yōu)化包括: 選擇運算盡早執(zhí)行 投影與選擇運算同時進(jìn)展,以防止反復(fù)掃描文件 公共子表達(dá)式預(yù)處置 謂詞的簡化處置 表達(dá)式的恒等變換等 邏輯優(yōu)化往往是一種等價變換,它的優(yōu)化會對查詢帶來絕對益處,這部分優(yōu)化與用戶無關(guān),完全由優(yōu)化器擔(dān)任,故我們不關(guān)懷這部分優(yōu)化。.優(yōu)化原理物理優(yōu)化包括: 選擇有效的存取途徑 選擇適宜的操作序列 提供較優(yōu)的操作實現(xiàn)方法 物理優(yōu)化那么往往是對動態(tài)情況的一種權(quán)衡。

6、物理優(yōu)化目前采用的方法有:啟發(fā)式的、基于統(tǒng)計信息的。智能式的ORACLE的優(yōu)化器是啟發(fā)式的,它的中心是一些從閱歷中得到的準(zhǔn)那么,它的益處是系統(tǒng)代價小,但不利的方面是用戶的負(fù)擔(dān)太重。.什么是索引索引 運用索引可快速訪問數(shù)據(jù)庫表中的特定信息。索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)展排序的一種構(gòu)造,提供指向存儲在表的指定列中的數(shù)據(jù)值的指針,然后根據(jù)指定的排序順序?qū)@些指針排序。索引列 可以基于數(shù)據(jù)庫表中的單列或多列創(chuàng)建索引。多列索引可以區(qū)分其中一列能夠有一樣值的行。索引類型 A獨一索引 獨一索引是不允許其中任何兩行具有一樣索引值的索引。 B主鍵索引 在數(shù)據(jù)庫中為表定義主鍵將自動創(chuàng)建主鍵索引,主鍵索引是獨

7、一索引的特定類型。該索引要求主鍵中的每個值都獨一。 C聚散索引 在聚集索引中,表中行的物理順序與鍵值的邏輯索引順序一樣。一個表只能包含一個聚集索引。與非聚集索引相比,聚集索引通常提供更快的數(shù)據(jù)訪問速度。.查詢優(yōu)化實例及分析優(yōu) 化 準(zhǔn) 那么運用ROWID的查詢效率最高;運用獨一索引的查詢要快于運用非獨一索引的查詢;運用完好闡明索引的查詢快于運用部分闡明索引的查詢;等條件的查詢快于范圍條件或不等條件的查詢;IS NULL條件的查詢不能運用索引;盡量防止查詢中出現(xiàn)全表掃描。.單表查詢的優(yōu)化ORACLE中實現(xiàn)單表查詢的途徑有三種:運用ROWIDACCESS BY ROWID索引掃描INDEX SCAN

8、全表掃描ACCESS FULL TABLE單表查詢優(yōu)化的目的: 如何選擇一個最正確存取途徑,顯然運用ROWID的查詢效果最高,索引掃描次之,全表掃描效率最低。在一個單表查詢中,假設(shè)上述三種方法都可用,顯然要選擇運用ROWID的方法,下面要引見的是如何在多個索引中選擇一個最正確的。在一個查詢中,假設(shè)有多個索引可用,ORACLE優(yōu)化器做如下任務(wù):選擇可利用的索引,即判別索引與謂詞的相容性;選擇查詢的驅(qū)動索引: 假設(shè)有獨一索引出現(xiàn),那么以此索引為入口,其他索引不用。 假設(shè)有多個非獨一索引,且查詢謂詞為相等謂詞,那么采用索引合并的算法。.單表查詢的優(yōu)化索引與謂詞有如下的優(yōu)化關(guān)系:1獨一索引列常數(shù)2非獨

9、一索引列常數(shù)3索引列常數(shù)闡明: 出現(xiàn)(1)時,(3)中的索引不用;出現(xiàn)(2)時,(3)的索引不用。 索引合并的處置方法只用在表中有多個索引上,最多合并索引數(shù)目不超越五個。 當(dāng)且僅當(dāng)只需(3)情況下的索引時,優(yōu)化器任選其一運用。 備注:比索引合并更有效的方法是建立組合索引 組合索引有兩種運用方式:全部闡明方式和部分闡明方式。 全部闡明方式:組合索引列全部出如今查詢中。 部分闡明方式:組合索引列前面一部分出如今查詢中。.單表查詢的優(yōu)化例子:SERV表建有組合索引: SERV_PLACE_X_IDX(PLACE_S_NODE, INTEGRAL, STATE)SERV表建有單索引: SERV_PLA

10、CE_S_NODE_IDX(PLACE_S_NODE) SERV_INTEGRAL_IDX(INTEGRAL) SERV_STATE_IDX(STATE)SQL語句: A)SELECT * FROM SERV T WHERE T.PLACE_S_NODE = 600488 AND T.INTEGRAL = 594000248 AND T.STATE = A; B) SELECT * FROM SERV T WHERE T.PLACE_S_NODE = 600488 AND T.INTEGRAL = 594000248; C)SELECT * FROM SERV T WHERE T.PLACE_

11、S_NODE = 600488 AND T.STATE = A;闡明: 例子A、 例子B優(yōu)化器選用的組合索引SERV_PLACE_X_IDX進(jìn)展索引掃描;例子A采用全部闡明方式,例子B采用部分闡明方式。例子C優(yōu)化器那么選用SERV_PLACE_S_NODE_IDX、SERV_STATE_IDX進(jìn)展索引合并,而不能運用組合SERV_PLACE_X_IDX,由于PLACE_S_NODE、STATE不是組合索引列PLACE_S_NODE、INTEGRAL、STATE的前部.多表銜接的優(yōu)化處置銜接方式多表銜接的根底是兩表銜接,銜接優(yōu)化的主要任務(wù)有:1、有關(guān)銜接方式的選擇排序合并銜接(Sort Merg

12、e Join (SMJ) ) 銜接屬性上都建有索引,那么可利用索引已有的排序作合并銜接。但在銜接屬性上沒有索引時,那么要首先對兩表在銜接屬性上排序,對排序結(jié)果再作銜接。SELECT A.MDSE_ID, B.NAME FROM MDSE A, DIM_MDSE_SPEC B WHERE A.MDSE_SPEC_ID = B.MDSE_SPEC_IDSELECT MDSE_ID, MDSE_SPEC_ID FROM MDSE ORDER BY MDSE_ID, MDSE_SPEC_IDSELECT NAME,MDSE_SPEC_ID FROM DIM_MDSE_SPEC ORDER BY NAM

13、E, MDSE_SPEC_IDSELECT A.MDSE_ID, B.NAME FROM A, B WHERE A.MDSE_SPEC_ID = B.MDSE_SPEC_ID.多表銜接的優(yōu)化處置銜接方式嵌套循環(huán)(Nested Loops (NL) ) 這個銜接方法有驅(qū)動表(外部表)的概念。該銜接過程是一個2層嵌套循環(huán)。 銜接過程: 驅(qū)動表的Row 1 - Probe -被驅(qū)動表的Row 驅(qū)動表的Row 2 - Probe -被驅(qū)動表的Row 驅(qū)動表的Row 3 - Probe -被驅(qū)動表的Row . 驅(qū)動表的Row n - Probe -被驅(qū)動表的Row 在嵌套循環(huán)銜接中,Oracle讀取驅(qū)動

14、表中的每一行,然后在被驅(qū)動表中檢查能否有匹配的行,一切被匹配的行都被放到結(jié)果集中,然后處置驅(qū)動表中的下一行。這個過程不斷繼續(xù),直到驅(qū)動表中的一切行都被處置。這是從銜接操作中可以得到第一個匹配行的最快的方法之一,這種類型的銜接可以用在需求快速呼應(yīng)的語句中,以呼應(yīng)速度為主要目的。 闡明:嵌套循環(huán)銜接可以先前往曾經(jīng)銜接的行,而不用等待一切的銜接操作處置完才前往數(shù)據(jù),這可以實現(xiàn)快速的呼應(yīng)時間。.多表銜接的優(yōu)化處置銜接方式哈希銜接(Hash Join) 這種銜接是在Oracle 7.3以后引入的,從實際上來說比NL與SMJ更高效,而且只用在CBO優(yōu)化器中。 銜接過程: 1、構(gòu)建階段:優(yōu)化器首先選擇一張小

15、表做為驅(qū)動表,運用哈希函數(shù)對銜接列進(jìn)展計算產(chǎn)生一張哈希表。通常這個步驟是在內(nèi)存hash_area_size里面進(jìn)展的,因此運算很快。 2、探測階段:優(yōu)化器對被驅(qū)動表的銜接列運用同樣的哈希函數(shù)計算得到的結(jié)果與前面構(gòu)成的哈希表進(jìn)展探測前往符合條件的記錄。這個階段中假設(shè)被驅(qū)動表的銜接列的值沒有與驅(qū)動表銜接列的值相等的話,那么這些記錄將會被丟棄而不進(jìn)展探測。 闡明:哈希銜接比較適用于前往大數(shù)據(jù)量結(jié)果集的銜接,且只適用于等值銜接。運用哈希銜接必需是在CBO方式下,參數(shù)hash_join_enabled設(shè)置為true缺省值,還要設(shè)置 hash_area_size參數(shù),以使哈希銜接高效運轉(zhuǎn),由于哈希銜接會在

16、該參數(shù)指定大小的內(nèi)存中運轉(zhuǎn),過小的參數(shù)會使哈希銜接的性能比其他銜接方式還要低。 .多表銜接的優(yōu)化處置銜接方式總結(jié)一下,在哪種情況下用哪種銜接方法比較好: A排序合并銜接(Sort Merge Join, SMJ): a) 對于非等值銜接,這種銜接方式的效率是比較高的。 b) 假設(shè)在關(guān)聯(lián)的列上都有索引,效果更好。 c) 對于將2個較大的表源做銜接,該銜接方法比NL銜接要好一些。 B嵌套循環(huán)(Nested Loops, NL): a) 假設(shè)驅(qū)動表(外部表)比較小,并且在被驅(qū)動表(內(nèi)部表)上有獨一索引,或有高選擇性非獨一索引時,運用這種方法可以得到較好的效率。 b)嵌套循環(huán)銜接有其它銜接方法沒有的的

17、一個優(yōu)點是:可以先前往曾經(jīng)銜接的行,而不用等待一切的銜接操作處置完才前往數(shù)據(jù),這可以實現(xiàn)快速的呼應(yīng)時間。 C哈希銜接(Hash Join, HJ): a) 這種方法是在oracle7后來引入的,運用了比較先進(jìn)的銜接實際,普通來說,其效率應(yīng)該好于其它2種銜接,但是這種銜接只能用在CBO優(yōu)化器中,而且需求設(shè)置適宜的hash_area_size參數(shù),才干獲得較好的性能。 b) 在2個較大的表源之間銜接時會獲得相對較好的效率,在一個表源較小時那么能獲得更好的效率。 c) 只能用于等值銜接中.多表銜接的優(yōu)化處置驅(qū)動表的選擇多表銜接的根底是兩表銜接,銜接優(yōu)化的主要任務(wù)有:2、有關(guān)銜接次序的優(yōu)化驅(qū)動表的選擇

18、基于規(guī)那么的優(yōu)化器 ORACLE的解析器按照從右到左的順序處置FROM子句中的表名,因此FROM子句中寫在最后的表根底表 driving table將被最先處置。 在FROM子句中包含多個表的情況下,他必需選擇記錄條數(shù)最少的表作為根底表。當(dāng)ORACLE處置多個表時, 會運用排序及合并的方式銜接它們。 首先,掃描第一個表FROM子句中最后的那個表并對記錄進(jìn)展派序。 然后掃描第二個表FROM子句中最后第二個表。 最后將一切從第二個表中檢索出的記錄與第一個表中適宜記錄進(jìn)展合并 。.多表銜接的優(yōu)化處置驅(qū)動表的選擇例子A例子B例子A: 以SERV表為驅(qū)動表,與VIP_INFO表做循環(huán)嵌套,產(chǎn)生的結(jié)果集與

19、MDSE表再做循環(huán)嵌套。例子B: 以MDSE表為驅(qū)動表,與SERV表做循環(huán)嵌套,產(chǎn)生的結(jié)果集與VIP_INFO表再做循環(huán)嵌套。.where語句的銜接順序ORACLE采用自下而上的順序解析WHERE子句,根據(jù)這個原理,表之間的銜接必需寫在其他WHERE條件之前, 那些可以過濾掉最大數(shù)量記錄的條件必需寫在WHERE子句的末尾。 例子:.查詢優(yōu)化實例及分析SQL共享共享SQL語句 為了不反復(fù)解析一樣的SQL語句(由于解析操作比較費資源,會導(dǎo)致性能下降),在第一次解析之后,ORACLE將SQL語句及解析后得到的執(zhí)行方案存放在內(nèi)存中。這塊位于系統(tǒng)全局區(qū)域SGA(systemglobalarea)的共享池

20、(sharedbufferpool)中的內(nèi)存可以被一切的數(shù)據(jù)庫用戶共享。因此,當(dāng)執(zhí)行一個SQL語句(有時被稱為一個游標(biāo))時,假設(shè)該語句和之前的執(zhí)行過的某一語句完全一樣,并且之前執(zhí)行的該語句與其執(zhí)行方案依然在內(nèi)存中存在,那么ORACLE就不需求再進(jìn)展分析,直接得到該語句的執(zhí)行途徑。ORACLE的這個功能大大地提高了SQL的執(zhí)行性能并大大節(jié)省了內(nèi)存的運用。 運用這個功能的關(guān)鍵是將執(zhí)行過的語句盡能夠放到內(nèi)存中,所以這要求有大的共享池(經(jīng)過設(shè)置sharedbufferpool參數(shù)值)和盡能夠的運用綁定變量的方法執(zhí)行SQL語句。.查詢優(yōu)化實例及分析SQL共享共享SQL語句條件 當(dāng)向Oracle提交一個S

21、QL語句,首先在共享內(nèi)存中查找能否有一樣的語句。留意:Oracle對兩者采取的是一種嚴(yán)厲匹配,要達(dá)成共享,SQL語句必需完全一樣(包括空格,換行等) 共享的三個條件: A字符級的比較 當(dāng)前被執(zhí)行的語句和共享池中的語句必需完全一樣 包括大小寫、空白和注釋 B兩條語句所指的對象必需完全一樣 C兩個SQL語句中綁定變量的名字必需一樣.查詢優(yōu)化實例及分析類型不一致查詢類型一致與不一致的查詢索引項為數(shù)值型 serv表serv_id number(10),建有serv_serv_id_idx(serv_id)索引.查詢優(yōu)化實例及分析類型不一致查詢類型一致與不一致的查詢索引項為字符型 serv表 acc_n

22、br varchar2(240) ,建有serv_acc_nbr_idx(acc_nbr)索引 .查詢優(yōu)化實例及分析類型不一致查詢類型一致與不一致的查詢總結(jié) 當(dāng)索引項為數(shù)值型的時候,在謂詞條件在類型不一致的情況下查詢, ORACLE的優(yōu)化器也可以援用該索引,是由于含有隱式轉(zhuǎn)換。 當(dāng)索引項為字符型的時候,謂詞條件就必需為字符,否那么ORACLE的優(yōu)化器不會運用到該索引,而采用全表掃描的方式來執(zhí)行。 闡明:為了防止ORACLE對他的SQL進(jìn)展隱式的類型轉(zhuǎn)換, 最好把類型轉(zhuǎn)換用顯式表現(xiàn)出來。 留意:當(dāng)字符和數(shù)值比較時, ORACLE會優(yōu)先轉(zhuǎn)換數(shù)值類型到字符類型。 例如: SELECT * FROM

23、SERV WHERE ACC_NUBER = 2394701; 轉(zhuǎn)換為下面語句: SELECT * FROM SERV WHERE TO_NUMBER(ACC_NUBER) = 2394701; SELECT * FROM SERV WHERE SERV_ID = 1800093946; 轉(zhuǎn)換為下面語句: SELECT * FROM SERV WHERE SERV_ID = TO_NUMBER(1800093946 ); .查詢優(yōu)化實例及分析操作符優(yōu)化不等條件的查詢闡明:對于不等查詢的兩種等價的不同方式,執(zhí)行方案是不一樣的假設(shè)serv表中acc_nbr=2394701的記錄占總記錄的比例小,運

24、用索引效率較快;假設(shè)比例較大運用索引也是沒有什么效果.查詢優(yōu)化實例及分析操作符優(yōu)化防止在索引列上運用IS NULL和IS NOT NULL 防止在索引中運用任何可以為空的列,ORACLE將無法運用該索引。對于單列索引,假設(shè)列包含空值,索引中將不存在此記錄。 對于復(fù)合索引,假設(shè)每個列都為空,索引中同樣不存在此記錄。假設(shè)至少有一個列不為空,那么記錄存在于索引中。 闡明:ORACLE在其索引構(gòu)造中不存空值,因此對IS NULL條件的查詢采用的是全表掃描的方式,而不能夠運用索引,且對這種條件的查詢不存在改寫方式。但是對IS NOT NULL的條件那么可用其它方法替代的。 對于IS NOT NULL的條

25、件可以如下的等價寫法: 對字符型 列名 空格串 對數(shù)值型 列名 0.查詢優(yōu)化實例及分析操作符優(yōu)化IN操作 用IN寫出來的SQL的優(yōu)點是比較容易寫及明晰易懂,但是用IN的SQL性能總是比較低的,從ORACLE執(zhí)行的步驟來分析用IN的SQL與不用IN的SQL是有區(qū)別的。 ORACLE試圖將其轉(zhuǎn)換成多個表的銜接,假設(shè)轉(zhuǎn)換不勝利那么先執(zhí)行IN里面的子查詢,再查詢外層的表記錄,假設(shè)轉(zhuǎn)換勝利那么直接采用多個表的銜接方式查詢。普通的SQL都可以轉(zhuǎn)換勝利,但對于含有分組統(tǒng)計等方面的SQL就不能轉(zhuǎn)換了。 闡明:在業(yè)務(wù)密集的SQL當(dāng)中盡量不采用IN操作符,可以用OR或 EXISTS替代。NOT IN操作 此操作是

26、強列引薦不運用的,由于它不能運用表的索引 。 闡明:可以用NOT EXISTS 或外銜接+判別為空替代。 LIKE操作符 LIKE操作符可以運用通配符查詢,里面的通配符組合能夠到達(dá)幾乎是恣意的查詢,但通配符%在搜索詞首出現(xiàn),是不會運用索引,會降低查詢速度。當(dāng)通配符出如今字符串其他位置時,優(yōu)化器就能利用索引。 select * from serv where name like PHS%; -運用范圍索引 select * from serv where name like %PHS%; -全表掃描.查詢優(yōu)化實例及分析操作符優(yōu)化 及 2; 高效率: SELECT * FROM TABLE1 WH

27、ERE A = 3; 執(zhí)行A2與A=3的效果就有很大的區(qū)別了,由于A2時ORACLE會先找出為2的記錄索引再進(jìn)展比較,而A=3時ORACLE那么直接找到=3的記錄索引。 闡明:在運用 大于操作時,應(yīng)盡量的思索用=大于等于來替代.查詢優(yōu)化實例及分析ORACLE為什么不運用索引1、檢查被索引的列或組合索引的首列能否出如今WHERE條件中,這是“執(zhí)行方案能用到相關(guān)索引的必要條件。2、看采用了哪種類型的銜接方式。ORACLE的共有Sort Merge JoinSMJ、Hash JoinHJ和Nested Loop JoinNL。在兩張表銜接,且內(nèi)表的目的列上建有索引時,只需Nested Loop才干有

28、效地利用到該索引。SMJ即使相關(guān)列上建有索引,最多只能因索引的存在,防止數(shù)據(jù)排序過程。HJ由于須做HASH運算,索引的存在對數(shù)據(jù)查詢速度幾乎沒有影響。3、看銜接順序能否允許運用相關(guān)索引。假設(shè)表STAFF_INFO的DEPT_NODE列上有索引,表DEPT_TREE的列DEPT_NODE上無索引,WHERE語句有STAFF_INFO.DEPT_NODE = DEPT_TREE.DEPT_NODE條件。在做NL銜接時, STAFF_INFO做為外表,先被訪問,由于銜接機(jī)制緣由,外表的數(shù)據(jù)訪問方式是全表掃描, STAFF_INFO.DEPT_NODE上的索引顯然是用不上,最多在其上做索引全掃描或索引

29、快速全掃描。4、能否用到系統(tǒng)數(shù)據(jù)字典表或視圖。由于系統(tǒng)數(shù)據(jù)字典表都未被分析過,能夠?qū)е聵O差的“執(zhí)行方案。但是不要擅自對數(shù)據(jù)字典表做分析,否那么能夠?qū)е滤梨i,或系統(tǒng)性能下降。5、索引列能否函數(shù)的參數(shù)。如是,索引在查詢時用不上。6、能否存在潛在的數(shù)據(jù)類型轉(zhuǎn)換。如將字符型數(shù)據(jù)與數(shù)值型數(shù)據(jù)比較,ORACLE會自動將字符型用to_number()函數(shù)進(jìn)展轉(zhuǎn)換,從而導(dǎo)致上一種景象的發(fā)生。7、能否為表和相關(guān)的索引搜集足夠的統(tǒng)計數(shù)據(jù)。對數(shù)據(jù)經(jīng)常有增、刪、改的表最好定期對表和索引進(jìn)展分析,可用SQL語句“analyze table xxxx compute statistics for all indexes;。ORACLE掌握了充分反映實踐的統(tǒng)計數(shù)據(jù),才有能夠做出正確的選擇。8、索引列的選擇性不高。9、索引列

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論