偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Oracle索引如何提高數(shù)據(jù)庫(kù)的查詢(xún)效率

數(shù)據(jù)庫(kù) Oracle
隨著Oracle位圖索引的開(kāi)發(fā)也提高了查詢(xún)效率,它是在實(shí)際運(yùn)用的某些方面起到了相當(dāng)?shù)淖饔?,但是如果你把Oracle位圖索引用錯(cuò)地方的話(huà),會(huì)出現(xiàn)不少的麻煩。

 Oracle索引可以說(shuō)在很大程度上提高了數(shù)據(jù)庫(kù)的相關(guān)查詢(xún)效率。但是我們?nèi)绻麑?duì)索引的使用不當(dāng)時(shí),那么就會(huì)反而引起相反的效果。如下圖所示的表,該采用什么索引呢?筆者借這個(gè)機(jī)會(huì),跟大家討論一下位圖索引的使用時(shí)機(jī)以及注意事項(xiàng)。

眾所周知,索引可以在很大程度上提高數(shù)據(jù)庫(kù)的查詢(xún)效率。但是如果索引使用不當(dāng),如在不恰當(dāng)?shù)牡胤讲捎昧瞬磺‘?dāng)?shù)乃饕敲捶炊鴷?huì)起到適得其反的效果。如下圖所示的表,該采用什么索引呢?筆者借這個(gè)機(jī)會(huì),跟大家討論一下位圖索引的使用時(shí)機(jī)以及注意事項(xiàng)。

一、 B樹(shù)索引的缺陷

在實(shí)際工作中,B樹(shù)索引是Oracle數(shù)據(jù)庫(kù)中最常用的一種索引。如在使用Create Index語(yǔ)句創(chuàng)建索引的時(shí)候,默認(rèn)采用的就是B樹(shù)索引。在B樹(shù)索引中,是通過(guò)在索引中保存排序過(guò)的索引列以及其對(duì)應(yīng)的Rowid列的值來(lái)實(shí)現(xiàn)的。不過(guò)對(duì)于某些比較特殊的情況,如基數(shù)比較小的列,使用這個(gè)B樹(shù)索引反而會(huì)降低數(shù)據(jù)庫(kù)的查詢(xún)效率。

基數(shù)在Oracle數(shù)據(jù)庫(kù)中指的是某個(gè)列可能擁有的不重復(fù)數(shù)值的個(gè)數(shù)。如上圖為例,SEX指員工的性別,一般就只有男女兩個(gè)值(其中1代表男、0代表女),其基數(shù)就為2。假設(shè)企業(yè)要組織公司所有的女員工出去旅游,作為三八婦女節(jié)的禮物。為此就需要查詢(xún)出公司所有女員工的信息。此時(shí)如果在性別列上加入B樹(shù)索引,那么反而會(huì)得到適得其反的效果。查詢(xún)效率不但沒(méi)有提升,反而下降。

在這些基數(shù)比較小的列上創(chuàng)建B樹(shù)索引并對(duì)其進(jìn)行查詢(xún)的話(huà),系統(tǒng)就會(huì)返回大量的記錄。因而這并不是具有高度選擇性的索引,并不能夠顯著提高查詢(xún)的速度。當(dāng)然并不是說(shuō)B樹(shù)索引不好,而是指其沒(méi)有用對(duì)地方。

二、 位圖索引的特點(diǎn)以及使用時(shí)機(jī)

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

位圖索引為什么可以提高基數(shù)比較小的表的查詢(xún)速度呢?這主要是因?yàn)樵趧?chuàng)建Oracle位圖索引的時(shí)候,數(shù)據(jù)庫(kù)往往會(huì)對(duì)整個(gè)表進(jìn)行掃描,并未索引列的每個(gè)取值建立一個(gè)位圖(位圖索引的名字也由此而來(lái))。在這個(gè)位圖中,為表中的每一行使用一個(gè)位元來(lái)表示該行是否包含該位圖的索引列的取值。位元到行的ROWID的對(duì)應(yīng)關(guān)系通過(guò)位圖索引中的應(yīng)收函數(shù)來(lái)完成。如此的話(huà),位圖索引就能夠以一種完全不同的內(nèi)部機(jī)制來(lái)完成與B樹(shù)索引相同的功能。

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

 

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

 

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

【編輯推薦】

  1. Oracle用戶(hù)密碼的修改
  2. Oracle客戶(hù)關(guān)系管理論壇的內(nèi)容簡(jiǎn)介
  3. Oracle RAC中錯(cuò)誤觀(guān)點(diǎn)出現(xiàn)的原因
  4. Oracle應(yīng)用的程序開(kāi)發(fā)趨于向Web的緣由
  5. Oracle索引掃描中的四中類(lèi)型描述
責(zé)任編輯:佚名 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-10-27 14:15:44

Oracle數(shù)據(jù)庫(kù)效率

2010-10-25 10:55:11

Oracle函數(shù)索引

2011-04-02 09:23:19

MySQL數(shù)據(jù)庫(kù)查詢(xún)效率

2011-04-02 09:33:13

MySQL數(shù)據(jù)庫(kù)查詢(xún)效率

2011-04-02 09:33:08

MySQL數(shù)據(jù)庫(kù)查詢(xún)效率

2011-04-11 16:50:13

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

2010-11-15 16:46:49

Oracle查詢(xún)效率

2011-03-16 08:54:45

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

2010-04-27 16:41:07

Oracle性能

2023-08-29 10:53:36

2010-05-10 15:50:39

Oracle數(shù)據(jù)庫(kù)性能

2010-08-31 13:35:53

DB2備份恢復(fù)

2010-05-07 18:21:42

Oracle提高SQL

2011-03-11 17:16:02

JSP操作數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)效率

2023-11-16 17:12:33

數(shù)據(jù)庫(kù)oracle

2018-01-10 09:33:18

數(shù)據(jù)庫(kù)SQL查詢(xún)優(yōu)化Java Web

2011-03-17 14:48:49

高級(jí)掃描數(shù)據(jù)庫(kù)查詢(xún)

2009-06-30 15:54:00

數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)JSP

2011-05-19 11:33:38

數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)速度

2012-07-23 14:30:33

Oracle
點(diǎn)贊
收藏

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