自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Oracle索引使用規(guī)則簡介

數(shù)據(jù)庫 Oracle
索引是使用Oracle數(shù)據(jù)庫時經(jī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ù)進(jìn)行轉(zhuǎn)換,從而導(dǎo)致第六種現(xiàn)象的發(fā)生。

第八,是否為表和相關(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ù),才有可能做出正確的選擇。

第九,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列上的索引進(jìn)行數(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)用,那么效率會高出很多。我們可以采用對該索引列進(jìn)行單獨分析,或用analyze語句對該列建立直方圖,對該列搜集足夠的統(tǒng)計數(shù)據(jù),使ORACLE在搜索選擇性較高的值能用上索引。

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

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

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

 

 

 

【編輯推薦】

創(chuàng)建Oracle索引的方法

Oracle索引整理的詳細(xì)描述

概論Oracle索引創(chuàng)建策略

分析Oracle索引掃描四大類

le索引原理

責(zé)任編輯:段燃 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-04-26 14:24:58

Oracle數(shù)據(jù)庫索引

2009-11-18 16:43:59

2009-11-19 11:00:55

Oracle xmlt

2011-07-14 10:53:54

TKPROFOracle

2010-04-21 13:43:31

Oracle聚簇索引

2010-10-25 10:55:11

Oracle函數(shù)索引

2010-11-15 12:02:24

Oracle進(jìn)程結(jié)構(gòu)

2009-11-16 11:03:44

Oracle INDE

2010-11-19 16:03:20

Oracle分析表

2010-10-25 15:12:42

Oracle日期函數(shù)

2010-10-25 17:28:05

Oracle bita

2010-10-28 10:54:46

oracle對象權(quán)限

2009-04-30 09:45:03

Oracle索引限制

2010-10-25 14:47:49

Oracle系統(tǒng)變量函

2010-10-26 11:39:51

Oracle EXPIMP備份

2010-11-18 13:09:19

Oracle case

2015-08-21 12:59:38

Oracle數(shù)據(jù)庫

2010-10-25 17:39:24

Oracle單行日期函

2011-04-12 13:27:09

Oracle日期函數(shù)

2023-10-11 06:50:32

Oracle數(shù)據(jù)庫系統(tǒng)
點贊
收藏

51CTO技術(shù)棧公眾號