日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Oracle索引使用規(guī)則簡介

Oracle索引相信大家都比較熟悉了,下面就為您介紹Oracle索引的使用規(guī)則,供您參考,希望可以讓您對Oracle索引有更深的認(rèn)識。

首先,我們要確定數(shù)據(jù)庫運行在何種優(yōu)化模式下,相應(yīng)的參數(shù)是:optimizer_mode??稍趕vrmgrl中運行“show parameter optimizer_mode"來查看。ORACLE V7以來缺省的設(shè)置應(yīng)是"choose",即如果對已分析的表查詢的話選擇CBO,否則選擇RBO。如果該參數(shù)設(shè)為“rule”,則不論表是否分析過,一概選用RBO,除非在語句中用hint強制。

其次,檢查被索引的列或組合索引的首列是否出現(xiàn)在PL/SQL語句的WHERE子句中,這是“執(zhí)行計劃”能用到相關(guān)索引的必要條件。

第三,看采用了哪種類型的連接方式。ORACLE的共有Sort Merge Join(SMJ)、Hash Join(HJ)和Nested Loop Join(NL)。在兩張表連接,且內(nèi)表的目標(biāo)列上建有Oracle索引時,只有Nested Loop才能有效地利用到該索引。SMJ即使相關(guān)列上建有索引,最多只能因索引的存在,避免數(shù)據(jù)排序過程。HJ由于須做HASH運算,索引的存在對數(shù)據(jù)查詢速度幾乎沒有影響。

第四,看連接順序是否允許使用相關(guān)Oracle索引。假設(shè)表emp的deptno列上有索引,表dept的列deptno上無索引,WHERE語句有emp.deptno=dept.deptno條件。在做NL連接時,emp做為外表,先被訪問,由于連接機制原因,外表的數(shù)據(jù)訪問方式是全表掃描,emp.deptno上的索引顯然是用不上,最多在其上做索引全掃描或索引快速全掃描。

第五,是否用到系統(tǒng)數(shù)據(jù)字典表或視圖。由于系統(tǒng)數(shù)據(jù)字典表都未被分析過,可能導(dǎo)致極差的“執(zhí)行計劃”。但是不要擅自對數(shù)據(jù)字典表做分析,否則可能導(dǎo)致死鎖,或系統(tǒng)性能下降。

第六,Oracle索引列是否函數(shù)的參數(shù)。如是,索引在查詢時用不上。

第七,是否存在潛在的數(shù)據(jù)類型轉(zhuǎn)換。如將字符型數(shù)據(jù)與數(shù)值型數(shù)據(jù)比較,ORACLE會自動將字符型用to_number()函數(shù)進行轉(zhuǎn)換,從而導(dǎo)致第六種現(xiàn)象的發(fā)生。

第八,是否為表和相關(guān)的索引搜集足夠的統(tǒng)計數(shù)據(jù)。對數(shù)據(jù)經(jīng)常有增、刪、改的表最好定期對表和索引進行分析,可用SQL語句“analyze table xxxx compute statistics for all indexes;"。ORACLE掌握了充分反映實際的統(tǒng)計數(shù)據(jù),才有可能做出正確的選擇。

第九,Oracle索引列的選擇性不高。

我們假設(shè)典型情況,有表emp,共有一百萬行數(shù)據(jù),但其中的emp.deptno列,數(shù)據(jù)只有4種不同的值,如10、20、30、40。雖然emp數(shù)據(jù)行有很多,ORACLE缺省認(rèn)定表中列的值是在所有數(shù)據(jù)行均勻分布的,也就是說每種deptno值各有25萬數(shù)據(jù)行與之對應(yīng)。假設(shè)SQL搜索條件DEPTNO=10,利用deptno列上的索引進行數(shù)據(jù)搜索效率,往往不比全表掃描的高,ORACLE理所當(dāng)然對索引“視而不見”,認(rèn)為該索引的選擇性不高。

但我們考慮另一種情況,如果一百萬數(shù)據(jù)行實際不是在4種deptno值間平均分配,其中有99萬行對應(yīng)著值10,5000行對應(yīng)值20,3000行對應(yīng)值30,2000行對應(yīng)值40。在這種數(shù)據(jù)分布圖案中對除值為10外的其它deptno值搜索時,毫無疑問,如果索引能被應(yīng)用,那么效率會高出很多。我們可以采用對該索引列進行單獨分析,或用analyze語句對該列建立直方圖,對該列搜集足夠的統(tǒng)計數(shù)據(jù),使ORACLE在搜索選擇性較高的值能用上索引。

第十,索引列值是否可為空(NULL)。如果索引列值可以是空值,在SQL語句中那些需要返回NULL值的操作,將不會用到索引,如COUNT(*),而是用全表掃描。這是因為索引中存儲值不能為全空。

第十一,看是否有用到并行查詢(PQO)。并行查詢將不會用到索引。

第十二,看PL/SQL語句中是否有用到bind變量。由于數(shù)據(jù)庫不知道bind變量具體是什么值,在做非相等連接時,如“<”,“>”,“l(fā)ike”等。ORACLE將引用缺省值,在某些情況下會對執(zhí)行計劃造成影響


分享文章:Oracle索引使用規(guī)則簡介
分享鏈接:http://www.dlmjj.cn/article/dhhdegi.html