1. 索引1) 需要建索引的列a) where從句中頻繁使用的關(guān)鍵字。 2) 索引限制條件a) where條件中索引列上使用了否定操作符(比如:<>,!=,is null,is (not) null),將不會(huì)使用索引,直接全表掃描,此時(shí)可以把部分否定操作符換成or形式或者union all的形式來執(zhí)行。 b) 索引列上使用了函數(shù)或運(yùn)算操作,則不會(huì)使用索引,轉(zhuǎn)而全表掃描,但可以建立相應(yīng)的函數(shù)索引來實(shí)現(xiàn)。 c) like索引列時(shí),通配符出現(xiàn)在詞首時(shí)不會(huì)使用索引,其他位置將使用。 d) 索引列與給定變量的類型不一致時(shí),將不會(huì)使用索引(oracle 11g中,可以進(jìn)行varchar2至number的自動(dòng)轉(zhuǎn)換,此種情況索引正常使用,反之則沒有,故盡量保持類型一致,不要寄希望于oracle的自動(dòng)轉(zhuǎn)換,否則容易搞混淆) e) 頻繁修改的列上最好不要建立索引,維護(hù)索引的開銷太大。 3) 組合索引由多個(gè)列構(gòu)成的索引。 4) 并行索引a) 快速創(chuàng)建并行索引 create index idx on table_name(id) parallel 4
b) 取消并行索引 alter index idx noparallel;
5) 監(jiān)視索引使用情況a) b) c) 刪除那些不被使用的索引,否則將阻礙性能 。 6) 索引的本質(zhì)oracle一般使用平衡二叉樹(B—tree)來存儲(chǔ)索引,在一個(gè)平衡樹索引(B-tree index)中,最底層的索引塊(葉塊(leaf block))存儲(chǔ)了被索引的數(shù)據(jù)值,以及對(duì)應(yīng)的 rowid。葉塊之間以雙向鏈表的形式相互連接。位于葉塊之上的索引塊被稱為分支塊,分枝塊中包含了指向下層索引塊的指針。 2. 表分區(qū)1) 原理:分區(qū)表通過對(duì)分區(qū)列的判斷,把分區(qū)列不同的記錄,放到不同的分區(qū)中。 2) 優(yōu)勢(shì): 3) 分類:range、hash、list、組合分區(qū) 4) range:范圍分區(qū)Range分區(qū)是應(yīng)用范圍比較廣的表分區(qū)方式,它是以列的值的范圍來做為分區(qū)的劃分條件,將記錄存放到列值所在的range分區(qū)中。當(dāng)數(shù)據(jù)在范圍內(nèi)均勻分布時(shí),性能最好。如按照時(shí)間劃分。如果某些記錄暫無法預(yù)測(cè)范圍,可以創(chuàng)建maxvalue分區(qū),所有不在指定范圍內(nèi)的記錄都會(huì)被存儲(chǔ)到maxvalue所在分區(qū)中。 5) hash:哈希分區(qū)hash分區(qū)是在列的取值難以確定的情況下,會(huì)將表中的數(shù)據(jù)平均分配到你指定的幾個(gè)分區(qū)中,列所在分區(qū)是依據(jù)分區(qū)列的hash值自動(dòng)分配。 6) list:列表分區(qū)List分區(qū)也需要指定列的值,其分區(qū)值必須明確指定(即該列值是可以枚舉的),通常建議使用要?jiǎng)?chuàng)建一個(gè)default分區(qū)存儲(chǔ)那些不在明確值范圍內(nèi)的記錄 7) 組合分區(qū):如果某表按照某列分區(qū)之后,仍然較大,或者是一些其它的需求,還可以通過分區(qū)內(nèi)再建子分區(qū)的方式將分區(qū)再分區(qū),即組合分區(qū)的方式。 8) 聯(lián)機(jī)重定義普通表轉(zhuǎn)換分區(qū)表,可以通過聯(lián)機(jī)重定義方法來實(shí)現(xiàn)。 3. 索引分區(qū)1) 概念對(duì)大數(shù)據(jù)量的索引進(jìn)行分區(qū)同樣能夠優(yōu)化應(yīng)用系統(tǒng)的性能。oracle索引分區(qū)分為局部/本地索引分區(qū)和全局索引分區(qū)。 2) 局部索引分區(qū)局部索引分區(qū)反應(yīng)基礎(chǔ)表的表結(jié)構(gòu),使用和分區(qū)表同樣的分區(qū)字段來進(jìn)行索引分區(qū)。獨(dú)立性強(qiáng) ,可以單獨(dú)重建,如果只有一個(gè)分區(qū)需要維護(hù),則只有一個(gè)本地索引受影響。 3) 全局索引分區(qū)全局索引分區(qū)不反應(yīng)基礎(chǔ)表的表結(jié)構(gòu),使用的字段與分區(qū)表的分區(qū)字段不同,可以保證所有分區(qū)中的記錄的唯一性。無論表是否分區(qū),都可以進(jìn)行全局索引分區(qū)。 4) 局部索引建立在表分區(qū)的基礎(chǔ)上,每一個(gè)表分區(qū)對(duì)應(yīng)一個(gè)索引段,索引列與表分區(qū)列無關(guān)。局部索引之間相互獨(dú)立。 5) 全局索引普通表或者跨表分區(qū)的索引,可以實(shí)現(xiàn)所有分區(qū)中記錄的唯一性。 |
|