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

Oracle位圖索引相關(guān)特點(diǎn)介紹

數(shù)據(jù)庫 Oracle
你是否對(duì)此問題有所疑惑?Oracle位圖索引提高基數(shù)比較小的表的相關(guān)查詢的速度的主要原因是什么呢?如果想破解此問題以下的內(nèi)容就是解答。

我們都知道Oracle中通過位圖索引可以在很大的程度上提高查詢的效率,而以下的文章主要要介紹的是Oracle位圖索引的相關(guān)特點(diǎn)及其使用的時(shí)機(jī),如果你想了解的更多的話,以下的文章會(huì)給你提供更多的相關(guān)知識(shí)。

在數(shù)據(jù)庫中(包括Sql Server數(shù)據(jù)庫),對(duì)于這種基數(shù)比較小的列,如果只有有限的幾個(gè)固定值,如上表中的性別、婚姻狀況等等,要為其建立索引的話,采用的就應(yīng)該是位圖索引,而不是B樹索引。

位圖索引為什么可以提高基數(shù)比較小的表的查詢速度呢?這主要是因?yàn)樵趧?chuàng)建位圖索引的時(shí)候,數(shù)據(jù)庫往往會(huì)對(duì)整個(gè)表進(jìn)行掃描,并未索引列的每個(gè)取值建立一個(gè)位圖(位圖索引的名字也由此而來)。在這個(gè)位圖中,為表中的每一行使用一個(gè)位元來表示該行是否包含該位圖的索引列的取值。

位元到行的ROWID的對(duì)應(yīng)關(guān)系通過位圖索引中的應(yīng)收函數(shù)來完成。如此的話,位圖索引就能夠以一種完全不同的內(nèi)部機(jī)制來完成與B樹索引相同的功能。

另外值得一提的是,對(duì)于B樹索引而言,如果在查詢條件語句中采用了AND等操作符號(hào),其查詢的效率會(huì)大打折扣。故在數(shù)據(jù)庫優(yōu)化中,會(huì)建議大家不要使用這些操作符,改用其他操作符代替。不過如果采用位圖索引的話,則沒有這方面的顧慮。如上例所示,假設(shè)用戶需要查找已婚的女性,那么就可以使用如下的語句查詢。

 

  1. select t.*, t.rowid  
  2. from userinfo t  
  3. where t.merital=’已婚’ and t.sex=0 

 

這個(gè)查詢引用了一些創(chuàng)建了位圖索引的列時(shí),這些位圖可以很方便的與AND或者OR操作符結(jié)合以找出想要的數(shù)據(jù)。數(shù)據(jù)庫在后臺(tái)處理的時(shí)候,先利用已經(jīng)創(chuàng)建的位圖進(jìn)行邏輯運(yùn)算,然后計(jì)算結(jié)果位圖中1的個(gè)數(shù),就可以查詢到滿足條件的所有記錄。如果查詢到結(jié)果后還需要更改數(shù)據(jù)的話,那么只需要按照結(jié)果位圖中取1的位元對(duì)應(yīng)的ROWID列的值進(jìn)行映射即可。

位圖索引的使用限制

位圖索引雖然在某些情況下能夠起到比B樹索引更好的效果。但是需要注意的是,并不是在任何場(chǎng)合都有效。如上例所示,如果在員工編號(hào)或者員工姓名列中使用的話,反而會(huì)降低數(shù)據(jù)查詢的效率。故其使用仍然受到比較大的限制。

如上面列舉的案例,一般情況下只有在“基數(shù)比較小的列中”和“需要使用與和或的運(yùn)算中”采用位圖索引能夠起到比B樹索引更好的效果。其他情況還是使用B數(shù)索引或者函數(shù)索引為好。

在Oracle數(shù)據(jù)庫中,有B樹索引、位圖索引、函數(shù)索引等等。具體采用哪種索引,還是要根據(jù)不同的情形來對(duì)待。隨著數(shù)據(jù)庫應(yīng)用越來越復(fù)雜,單靠一個(gè)B樹索引已經(jīng)不能夠應(yīng)付了。如列中包含了表達(dá)式或者函數(shù)的話,B樹索引或者位圖索引都不能夠用,只有用函數(shù)索引。

對(duì)于數(shù)據(jù)庫專家來說,索引的創(chuàng)建與管理或許沒有難度,只需要簡(jiǎn)單的幾個(gè)語句即可。比較困難的是,如何根據(jù)實(shí)際情況來選擇合適的索引。

 

責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2009-12-29 13:29:28

WPF Depende

2021-08-27 22:07:55

Oracle索引位圖

2009-12-31 09:50:52

Silverlight

2009-04-10 14:38:17

Oracle高手位圖索引

2010-04-08 10:57:04

Oracle編程

2010-04-21 14:45:39

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

2010-10-29 10:22:21

Oracle表空間

2010-04-08 09:27:44

Oracle 安裝腳本

2010-04-14 17:38:41

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

2010-04-16 11:39:56

Oracle存儲(chǔ)過程

2010-04-23 14:08:11

Oracle數(shù)據(jù)類型

2010-03-31 18:27:14

Oracle培訓(xùn)

2010-03-18 09:28:14

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

2010-04-21 15:22:54

Oracle游標(biāo)

2010-04-07 16:02:29

Oracle性能

2009-12-14 13:56:12

Ruby特點(diǎn)

2010-01-27 16:41:48

Android特點(diǎn)

2010-03-29 11:31:45

2010-04-02 16:53:34

Oracle內(nèi)存結(jié)構(gòu)

2011-09-02 10:37:15

Oraclesqlload用法
點(diǎn)贊
收藏

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