oracle索引怎么優(yōu)化 oracle索引優(yōu)化背景

ORACLE索引提高效率

用索引提高效率

目前成都創(chuàng)新互聯(lián)已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計、河南網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

索引是表的一個概念部分 用來提高檢索數(shù)據(jù)的效率 實(shí)際上 ORACLE使用了一個復(fù)雜的自平衡B tree結(jié)構(gòu) 通常 通過索引查詢數(shù)據(jù)比全表掃描要快 當(dāng)ORACLE找出執(zhí)行查詢和Update語句的最佳路徑時 ORACLE優(yōu)化器將使用索引 同樣在聯(lián)結(jié)多個表時使用索引也可以提高效率 另一個使用索引的好處是 它提供了主鍵(primary key)的唯一性驗(yàn)證

除了那些LONG或LONG RAW數(shù)據(jù)類型 你可以索引幾乎所有的列 通常 在大型表中使用索引特別有效 當(dāng)然 你也會發(fā)現(xiàn) 在掃描小表時 使用索引同樣能提高效率

雖然使用索引能得到查詢效率的提高 但是我們也必須注意到它的代價 索引需要空間來

存儲 也需要定期維護(hù) 每當(dāng)有記錄在表中增減或索引列被修改時 索引本身也會被修改 這意味著每條記錄的INSERT DELETE UPDATE將為此多付出 次的磁盤I/O 因?yàn)樗饕枰~外的存儲空間和處理 那些不必要的索引反而會使查詢反應(yīng)時間變慢

定期的重構(gòu)索引是有必要的

ALTER INDEX INDEXNAME REBUILD TABLESPACENAME

索引的操作

ORACLE對索引有兩種訪問模式

索引唯一掃描 ( INDEX UNIQUE SCAN)

大多數(shù)情況下 優(yōu)化器通過WHERE子句訪問INDEX

例如:

表LODGING有兩個索引 : 建立在LODGING列上的唯一性索引LODGING_PK和建立在MANAGER列上的非唯一性索引LODGING$MANAGER

SELECT * FROM LODGING

WHERE LODGING = ROSE HILL ;

在內(nèi)部 上述SQL將被分成兩步執(zhí)行 首先 LODGING_PK 索引將通過索引唯一掃描的方式被訪問 獲得相對應(yīng)的ROWID 通過ROWID訪問表的方式 執(zhí)行下一步檢索

如果被檢索返回的列包括在INDEX列中 ORACLE將不執(zhí)行第二步的處理(通過ROWID訪問表) 因?yàn)闄z索數(shù)據(jù)保存在索引中 單單訪問索引就可以完全滿足查詢結(jié)果

下面SQL只需要INDEX UNIQUE SCAN 操作

SELECT LODGING FROM LODGING WHERE LODGING = ROSE HILL ;

索引范圍查詢(INDEX RANGE SCAN)

適用于兩種情況:

基于一個范圍的檢索

基于非唯一性索引的檢索

例 :

SELECT LODGING FROM LODGING WHERE LODGING LIKE M% ;

WHERE子句條件包括一系列值 ORACLE將通過索引范圍查詢的方式查詢LODGING_PK 由于索引范圍查詢將返回一組值 它的效率就要比索引唯一掃描低一些

例 :

SELECT LODGING FROM LODGING WHERE MANAGER = BILL GATES ;

這個SQL的執(zhí)行分兩步 LODGING$MANAGER的索引范圍查詢(得到所有符合條件記錄的ROWID) 和下一步同過ROWID訪問表得到LODGING列的值 由于LODGING$MANAGER是一個非唯一性的索引 數(shù)據(jù)庫不能對它執(zhí)行索引唯一掃描

由于SQL返回LODGING列 而它并不存在于LODGING$MANAGER索引中 所以在索引范圍查詢后會執(zhí)行一個通過ROWID訪問表的操作

WHERE子句中 如果索引列所對應(yīng)的值的第一個字符由通配符(WILDCARD)開始 索引將不被采用

SELECT LODGING FROM LODGING WHERE MANAGER LIKE %HANMAN ;

在這種情況下 ORACLE將使用全表掃描

基礎(chǔ)表的選擇

基礎(chǔ)表(Driving Table)是指被最先訪問的表(通常以全表掃描的方式被訪問) 根據(jù)優(yōu)化器的不同 SQL語句中基礎(chǔ)表的選擇是不一樣的

如果你使用的是CBO (COST BASED OPTIMIZER) 優(yōu)化器會檢查SQL語句中的每個表的物理大小 索引的狀態(tài) 然后選用花費(fèi)最低的執(zhí)行路徑

如果你用RBO (RULE BASED OPTIMIZER) 并且所有的連接條件都有索引對應(yīng) 在這種情況下 基礎(chǔ)表就是FROM 子句中列在最后的那個表

舉例:

SELECT A NAME B MANAGER FROM WORKER A LODGING B

WHERE A LODGING = B LODING;

由于LODGING表的LODING列上有一個索引 而且WORKER表中沒有相比較的索引 WORKER表將被作為查詢中的基礎(chǔ)表

多個平等的索引

當(dāng)SQL語句的執(zhí)行路徑可以使用分布在多個表上的多個索引時 ORACLE會同時使用多個索引并在運(yùn)行時對它們的記錄進(jìn)行合并 檢索出僅對全部索引有效的記錄

在ORACLE選擇執(zhí)行路徑時 唯一性索引的等級高于非唯一性索引 然而這個規(guī)則只有

當(dāng)WHERE子句中索引列和常量比較才有效 如果索引列和其他表的索引類相比較 這種子句在優(yōu)化器中的等級是非常低的

如果不同表中兩個想同等級的索引將被引用 FROM子句中表的順序?qū)Q定哪個會被率先使用 FROM子句中最后的表的索引將有最高的優(yōu)先級

如果相同表中兩個想同等級的索引將被引用 WHERE子句中最先被引用的索引將有最高的優(yōu)先級

舉例:

DEPTNO上有一個非唯一性索引 EMP_CAT也有一個非唯一性索引

SELECT ENAME FROM EMP WHERE DEPT_NO = AND EMP_CAT = A ;

這里 DEPTNO索引將被最先檢索 然后同EMP_CAT索引檢索出的記錄進(jìn)行合并 執(zhí)行路徑如下:

TABLE ACCESS BY ROWID ON EMP AND EQUAL INDEX RANGE SCAN ON DEPT_IDX

INDEX RANGE SCAN ON CAT_IDX

等式比較和范圍比較

當(dāng)WHERE子句中有索引列 ORACLE不能合并它們 ORACLE將用范圍比較

舉例:

DEPTNO上有一個非唯一性索引 EMP_CAT也有一個非唯一性索引

SELECT ENAME FROM EMP WHERE DEPTNO AND EMP_CAT = A ;

這里只有EMP_CAT索引被用到 然后所有的記錄將逐條與DEPTNO條件進(jìn)行比較 執(zhí)行路徑如下:

TABLE ACCESS BY ROWID ON EMP

INDEX RANGE SCAN ON CAT_IDX

不明確的索引等級

當(dāng)ORACLE無法判斷索引的等級高低差別 優(yōu)化器將只使用一個索引 它就是在WHERE子句中被列在最前面的

舉例:

DEPTNO上有一個非唯一性索引 EMP_CAT也有一個非唯一性索引

SELECT ENAME FROM EMP WHERE DEPTNO AND EMP_CAT A ;

這里 ORACLE只用到了DEPT_NO索引 執(zhí)行路徑如下:

TABLE ACCESS BY ROWID ON EMP

INDEX RANGE SCAN ON DEPT_IDX

我們來試一下以下這種情況:

SQL select index_name uniqueness from user_indexes where table_name = EMP ;

INDEX_NAME UNIQUENES

EMPNO UNIQUE

EMPTYPE NONUNIQUE

SQL select * from emp where empno = and emp_type = A ;

no rows selected

Execution Plan

SELECT STATEMENT Optimizer=CHOOSE

TABLE ACCESS (BY INDEX ROWID) OF EMP

INDEX (RANGE SCAN) OF EMPTYPE (NON UNIQUE)

雖然EMPNO是唯一性索引 但是由于它所做的是范圍比較 等級要比非唯一性索引的等式比較低!

強(qiáng)制索引失效

如果兩個或以上索引具有相同的等級 你可以強(qiáng)制命令ORACLE優(yōu)化器使用其中的一個(通過它 檢索出的記錄數(shù)量少)

舉例:

SELECT ENAME FROM EMP WHERE EMPNO =

AND DEPTNO + = /*DEPTNO上的索引將失效*/

AND EMP_TYPE || = A /*EMP_TYPE上的索引將失效*/

這是一種相當(dāng)直接的提高查詢效率的辦法 但是你必須謹(jǐn)慎考慮這種策略 一般來說 只有在你希望單獨(dú)優(yōu)化幾個SQL時才能采用它

這里有一個例子關(guān)于何時采用這種策略

假設(shè)在EMP表的EMP_TYPE列上有一個非唯一性的索引而EMP_CLASS上沒有索引

SELECT ENAME FROM EMP WHERE EMP_TYPE = A AND EMP_CLASS = X ;

優(yōu)化器會注意到EMP_TYPE上的索引并使用它 這是目前唯一的選擇 如果 一段時間以后 另一個非唯一性建立在EMP_CLASS上 優(yōu)化器必須對兩個索引進(jìn)行選擇 在通常情況下 優(yōu)化器將使用兩個索引并在他們的結(jié)果集合上執(zhí)行排序及合并 然而 如果其中一個索引(EMP_TYPE)接近于唯一性而另一個索引(EMP_CLASS)上有幾千個重復(fù)的值 排序及合并就會成為一種不必要的負(fù)擔(dān) 在這種情況下 你希望使優(yōu)化器屏蔽掉EMP_CLASS索引

用下面的方案就可以解決問題

SELECT ENAME FROM EMP WHERE EMP_TYPE = A AND EMP_CLASS|| = X ;

避免在索引列上使用計算.

WHERE子句中 如果索引列是函數(shù)的一部分.優(yōu)化器將不使用索引而使用全表掃描.

舉例:

低效

SELECT … FROM DEPT WHERE SAL * ;

高效:

SELECT … FROM DEPT WHERE SAL / ;

自動選擇索引

如果表中有兩個以上(包括兩個)索引 其中有一個唯一性索引 而其他是非唯一性.

在這種情況下 ORACLE將使用唯一性索引而完全忽略非唯一性索引.

舉例:

SELECT ENAME FROM EMP WHERE EMPNO =

AND DEPTNO = ;

這里 只有EMPNO上的索引是唯一性的 所以EMPNO索引將用來檢索記錄.

TABLE ACCESS BY ROWID ON EMP

INDEX UNIQUE SCAN ON EMP_NO_IDX

避免在索引列上使用NOT

通常  我們要避免在索引列上使用NOT NOT會產(chǎn)生在和在索引列上使用函數(shù)相同的

影響 當(dāng)ORACLE 遇到 NOT 他就會停止使用索引轉(zhuǎn)而執(zhí)行全表掃描

舉例:

低效: (這里 不使用索引)

SELECT … FROM DEPT WHERE DEPT_CODE NOT = ;

高效: (這里 使用了索引)

SELECT … FROM DEPT WHERE DEPT_CODE ;

需要注意的是 在某些時候 ORACLE優(yōu)化器會自動將NOT轉(zhuǎn)化成相對應(yīng)的關(guān)系操作符

NOT to =

NOT = to

NOT to =

NOT = to

SQL select * from emp where NOT empno ;

no rows selected

Execution Plan

SELECT STATEMENT Optimizer=CHOOSE

TABLE ACCESS (BY INDEX ROWID) OF EMP

INDEX (RANGE SCAN) OF EMPNO (UNIQUE)

SQL select * from emp where empno = ;

no rows selected

Execution Plan

SELECT STATEMENT Optimizer=CHOOSE

TABLE ACCESS (BY INDEX ROWID) OF EMP

INDEX (RANGE SCAN) OF EMPNO (UNIQUE)

兩者的效率完全一樣 也許這符合作者關(guān)于 在某些時候 ORACLE優(yōu)化器會自動將NOT轉(zhuǎn)化成相對應(yīng)的關(guān)系操作符 的觀點(diǎn).

用=替代

如果DEPTNO上有一個索引

高效:

SELECT * FROM EMP WHERE DEPTNO =

低效:

SELECT * FROM EMP WHERE DEPTNO

lishixinzhi/Article/program/Oracle/201311/17710

如何提高Oracle位圖索引的使用效果

位圖索引是Oralce數(shù)據(jù)庫索引中的異類,其在某些比較特殊的場合中有突出的表現(xiàn)。一般來說,位圖索引的效果直接跟列的基數(shù)相關(guān)。為此在談到如何提高位圖索引的使用效果時,也往往跟這個列的基數(shù)相關(guān)。為此必須對這個列的基數(shù)有一個清晰的認(rèn)識。

一、什么時候改采用位圖索引

基數(shù)是指某個列可能擁有的不重復(fù)數(shù)值的個數(shù)。比如說在一個中華人民共和國公民的信息表中,包含著十幾億條的記錄。但是在這些記錄中,有幾個比較特殊的列,其指包含幾個有限的重復(fù)數(shù)值。如性別這一字段,其就只有男與女兩個可能值;如在民族一列內(nèi)也只有56個不重復(fù)的值;如在出身地一列內(nèi),中國只有34個省市自治區(qū)。

有時候用戶可能需要根據(jù)這些列來查詢相關(guān)的數(shù)據(jù)。如公司搞活動的時候,可能需要確認(rèn)一下活動有沒有涉及到宗教的禁忌,如可能涉及到回族的禁忌的話,那么就需要查詢一下員工信息系統(tǒng),看看公司有沒有回族的員工。如公司可能在三八婦女節(jié)的時候,會給女員工提供一定的福利,為此也需要在數(shù)據(jù)庫中拉出女員工的名單,此時也就是根據(jù)性別這個字段來查詢數(shù)據(jù)。等等。如果用戶查詢的列的基數(shù)非常的小,只是有限的幾個固定值,如性別、民族、行政區(qū)等等。要為這些基數(shù)值比較小的列建立索引時,就需要建立位圖索引。如果一定要說一個具體的標(biāo)準(zhǔn)的話,那么筆者認(rèn)為如果基數(shù)值在整個表記錄的2%以內(nèi)或者字段內(nèi)容的重復(fù)值在100次以上,則通過位圖索引可以起到不錯的效果。

大部分情況下都是通過基數(shù)值來確定是否需要使用位圖索引。但是還有一種比較特殊的情況,可能這個列的基數(shù)值非常的大,也就是說這個列中的值重復(fù)性不是很高。但是只要起滿足一定的條件,那么在這個字段上創(chuàng)建位圖索引,也可以起到不錯的效果。一般來說,如果字段往往在Where查詢條件語句中被用到,并且采用的運(yùn)算符為AND

或者OR 的邏輯運(yùn)算符號的話,那么其效果也比建議其他索引要好的多。

二、把需要建立位圖索引的列設(shè)置為固定長度的數(shù)據(jù)類型。

在Oracle數(shù)據(jù)庫中,數(shù)據(jù)類型從大的來說,包括固定長度的數(shù)據(jù)類型與可變長度的數(shù)據(jù)類型。如就拿字符型數(shù)據(jù)來說,就有固定長度的字符串類型(char)與可變長度的字符串類型(VARCHAR2

)。這兩個數(shù)據(jù)類型都是字符串?dāng)?shù)據(jù)類型,它們的差別主要在于字符串長度的控制上。CHAR存儲固定長度的字符串。如果實(shí)際存儲的字符串沒有達(dá)到其規(guī)定的最大值的話,則數(shù)據(jù)庫系統(tǒng)會自動在后面加上空格。而VARCHAR2則主要用來存儲可變長度的字符數(shù)據(jù)類型。如存儲固定長度的CHAR字符串類型不同,如果在這個列中存儲的數(shù)據(jù)沒有達(dá)到規(guī)定的最大值,

則數(shù)據(jù)庫系統(tǒng)不會在最后加入空格,以實(shí)際的字符串存儲。如果從數(shù)據(jù)庫的體積上來看,肯定是可變長的數(shù)據(jù)類型比較好。

但是如果從位圖索引的效果上來看,則最好把建立位圖索引的列設(shè)置為固定長度的數(shù)據(jù)類型。因?yàn)槲粓D索引使用固定長度的數(shù)據(jù)類型要比可變長度的數(shù)據(jù)類型在性能上要更加的優(yōu)越。也就是說,如果要在某個字符類型的列上建立位圖索引,那么最好把這個列的數(shù)據(jù)類型設(shè)置為char(即使其實(shí)際存儲的長度不同),而不是設(shè)置額外NVCHAR2。因?yàn)橄鄬τ谛阅艿奶嵘齺碚f,這點(diǎn)空間的損失仍然是值得的。

另外我們也可以通過其他一些手段來保證列中存儲內(nèi)存長度的一致。如拿中國的行政區(qū)為例,大部分行政區(qū)就是3個字,如浙江省;但是長度比較長的有8個字符,如新疆維吾爾自治區(qū)。如果記錄比較多的話,累積下來確實(shí)會造成比較大的浪費(fèi)。在這種情況下,數(shù)據(jù)庫管理在設(shè)計的時候,可以采用一些折中的處理方式。如利用簡稱來代表各個省份的名字。還有一種就是在存儲的時候利用數(shù)字來表示省份,然后再在另外一張表中建立數(shù)字與省份之間的對應(yīng)關(guān)系。筆者建議采用的是后面一種方式。

總之如果要為某個列建立位圖索引的話,則數(shù)據(jù)庫管理員最好能夠想方設(shè)法讓這個字段采用固定長度的數(shù)據(jù)類型,有時候即使?fàn)奚稽c(diǎn)存儲空間也是在所不辭。

三、位圖索引的使用限制。

雖然說位圖索引在基數(shù)比較小的列或者使用到邏輯運(yùn)算符時能夠顯著的提高數(shù)據(jù)庫的查詢性能,但是其在使用的時候仍然有不少的限制。數(shù)據(jù)庫管理員需要了解這些限制,如此的話在數(shù)據(jù)庫設(shè)計時才不會竹籃子打水一場空。

如把某個字段設(shè)置為位圖索引的話,最好采用固定長度的數(shù)據(jù)類型。同時這個長度有最大的限制。在最新的Oracle數(shù)據(jù)庫版本中,這個位圖索引的最大長度不能夠超過30。不知道以后的版本中會不會放寬這個長度上的限制。如位圖索引不能夠被聲明為唯一索引;如位圖索引不包含認(rèn)為列數(shù)據(jù),并且不能夠用于任何類型的完整性檢查;如當(dāng)執(zhí)行ALTER

TABLE語句并修改包含有位圖索引的列時,這會使位圖索引失效。

最重大的一個限制是基于規(guī)則的優(yōu)化器不會考慮位圖索引。Oracle數(shù)據(jù)庫系統(tǒng)在執(zhí)行一個SQL之前,首先要分析一下語句的執(zhí)行計劃,然后再按執(zhí)行計劃去執(zhí)行。分析語句的執(zhí)行計劃的工作是由優(yōu)化器來完成的。Oracle的優(yōu)化器共有兩種的優(yōu)化方式,即基于規(guī)則的優(yōu)化方式和基于成本的優(yōu)化方式。基于規(guī)則的優(yōu)化方式是指優(yōu)化器在分析SQL語句時,所遵循的是Oracle內(nèi)部預(yù)定的一些規(guī)則。基于成本的優(yōu)化方式是看語句的執(zhí)行成本。這里的成本主要指Cpu和內(nèi)存。優(yōu)化器在判斷是否用這種方式時,主要參照的是表及索引的統(tǒng)計信息。統(tǒng)計信息給出表的大小、有少行、每行的長度等信息。然后數(shù)據(jù)庫系統(tǒng)會根據(jù)這些信息來確定是否需要采用這個優(yōu)化方式。另外還有根據(jù)這兩個優(yōu)化模式衍生出來的優(yōu)化器。

總之?dāng)?shù)據(jù)庫管理理員需要明確的一點(diǎn)就是,如果要采用位圖索引的話,則最好把數(shù)據(jù)庫的優(yōu)化器選擇為基于成本的優(yōu)化器模式。因?yàn)槿绻麛?shù)據(jù)庫采用的是基于規(guī)則的優(yōu)化器模式的話,則會忽略位圖索引。那么此時數(shù)據(jù)庫管理員所建立的位圖索引將一無用處。這一點(diǎn)大部分?jǐn)?shù)據(jù)庫管理員可能并不清楚,一定要引以為鑒。

四、同一個查詢中合并多個位圖索引。

通常情況下在同一個查詢中合并多個位圖索引后,可以使得數(shù)據(jù)庫的查詢性能得到顯著的提高。也就是說,如在員工信息表中有性別、婚姻狀態(tài)、職稱等字段。這些字段都是基數(shù)比較低的字段,可以用來創(chuàng)建位圖索引。如果現(xiàn)在用戶在查詢的時候,需要根據(jù)上面這三個字段來查詢員工的信息,如需要查找性別為女、婚姻狀態(tài)為已婚、職稱為經(jīng)理層以上的員工信息,為他們舉行一個家庭派對的活動。此時在查詢條件中就需要用到這個三個位圖索引字段。數(shù)據(jù)庫在執(zhí)行查詢計劃的時候,如果Where字句中包含了這些位圖索引字段的話,擇優(yōu)化器會依次使用3個單獨(dú)的位圖索引。每個位圖記錄指針,用于指示表中哪些行包含位圖中的已知值。有了這些重要信息之后,數(shù)據(jù)庫會執(zhí)行一個位圖AND操作并將從所有的四個位圖中返回哪些行。然后再把這些值轉(zhuǎn)換為ROWID值,并且查詢繼續(xù)完成剩余的處理工作(根據(jù)ROWID的值查詢其他的信息)。

也就是說,如果在一個查詢條件語句中,采用了多個位圖索引來進(jìn)行查詢的話,其查詢的效果是1+1〉2的效果。為此在應(yīng)用程序設(shè)計中,可以把一些位圖索引的字段作為查詢條件都放置在查詢窗口中,以明示的方式讓用戶選擇查詢條件。這對于提高應(yīng)用程序的查詢性能具有很大的幫助。

在Oracle數(shù)據(jù)庫中一個表中最大可以支持30個位圖索引。當(dāng)然實(shí)際工作中往往用不了這么多。因?yàn)橥ǔG闆r下只有在基數(shù)值比較小的列上利用這個位圖索引才能夠起到比較好的效果。相反如果在一些基數(shù)值比較大的列上采用位圖索引的話,反而會起到相反的效果。而在一張表中基數(shù)列小的值不會很大。所以說數(shù)據(jù)庫管理員更加需要關(guān)注這些基數(shù)列比較小的值。如果用戶有對這些基數(shù)值小的列進(jìn)行查詢的習(xí)慣,那么數(shù)據(jù)庫管理員就不能夠有任何吝嗇,要馬上把這些列設(shè)置為位圖索引。并且在查詢設(shè)計的時候,最好能夠在同一個查詢中合并多個位圖索引,以提高查詢的性能。

如何提升Oracle數(shù)據(jù)庫搜索效率

需要用索引來解決,索引的創(chuàng)建規(guī)則如下:

1、表的

主鍵

外鍵

必須有索引;

2、數(shù)據(jù)量超過300的表應(yīng)該有索引;

3、經(jīng)常與其他表進(jìn)行連接的表,在連接字段上應(yīng)該建立索引;

4、經(jīng)常出現(xiàn)在Where子句中的字段,特別是大表的字段,應(yīng)該建立索引;

5、索引應(yīng)該建在選擇性高的字段上;

6、索引應(yīng)該建在小字段上,對于大的文本字段甚至超長字段,不要建索引;

7、復(fù)合索引的建立需要進(jìn)行仔細(xì)分析;盡量考慮用單字段索引代替:

A、

正確選擇

復(fù)合索引中的主列字段,一般是選擇性較好的字段;

B、復(fù)合索引的幾個字段是否經(jīng)常同時以AND方式出現(xiàn)在Where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立復(fù)合索引;否則考慮單字段索引;

C、如果復(fù)合索引中包含的字段經(jīng)常單獨(dú)出現(xiàn)在Where子句中,則分解為多個單字段索引;

D、如果復(fù)合索引所包含的字段超過3個,那么仔細(xì)考慮其必要性,考慮減少復(fù)合的字段;

E、如果既有單字段索引,又有這幾個字段上的復(fù)合索引,一般可以刪除復(fù)合索引;

8、頻繁進(jìn)行

數(shù)據(jù)操作

的表,不要建立太多的索引;

9、刪除無用的索引,避免對執(zhí)行計劃造成負(fù)面影響;

以上是一些普遍的建立索引時的判斷依據(jù)。一言以蔽之,索引的建立必須慎重,對每個索引的必要性都應(yīng)該經(jīng)過仔細(xì)分析,要有建立的依據(jù)。因?yàn)樘嗟乃饕c不充分、不正確的索引對性能都毫無益處:在表上建立的每個索引都會增加存儲開銷,索引對于插入、刪除、更新操作也會增加處理上的開銷。另外,過多的復(fù)合索引,在有單字段索引的情況下,一般都是沒有

存在價值

的;相反,還會降低數(shù)據(jù)增加刪除時的性能,特別是對頻繁更新的表來說,負(fù)面影響更大。

標(biāo)題名稱:oracle索引怎么優(yōu)化 oracle索引優(yōu)化背景
網(wǎng)頁路徑:http://muchs.cn/article46/hheseg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈微信小程序、定制開發(fā)、網(wǎng)站制作定制網(wǎng)站、App設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)