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