亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Oracle數(shù)據(jù)庫中的索引詳解

系統(tǒng) 2195 0

一、 ROWID的概念

存儲 了row在數(shù)據(jù)文件中的具體位置:64位編碼的數(shù)據(jù),A-Z, a-z, 0-9, +, 和 /,

  row在數(shù)據(jù)塊中的 存儲 方式

  SELECT ROWID, last_name FROM hr.employees WHERE department_id = 20;

  比如:OOOOOOFFFBBBBBBRRR

  OOOOOO:data object number, 對應(yīng)dba_objects.data_object_id

  FFF:file#, 對應(yīng)v$datafile.file#

  BBBBBB:block#

  RRR:row#

  Dbms_rowid包

  SELECT dbms_rowid.rowid_block_number('AAAGFqAABAAAIWEAAA') from dual;

  具體到特定的物理文件

二、 索引的概念

  1、 類似書的目錄結(jié)構(gòu)

  2、 Oracle 的“索引”對象,與表關(guān)聯(lián)的可選對象,提高SQL查詢語句的速度

  3、 索引直接指向包含所查詢值的行的位置,減少磁盤I/O

  4、 與所索引的表是相互獨立的物理結(jié)構(gòu)

  5、 Oracle 自動使用并維護索引,插入、刪除、更新表后,自動更新索引

--工作感覺中 所謂oracle自動維護在插入后,其實好像并非如此!不是oracle 獨立的進程在 插入后開始維護

而是在插入這個SESSION中維護,在insert into commit; 語句后維護。

  6、 語法:CREATE INDEX index ON table (column[, column]...);

  7、 B-tree結(jié)構(gòu)(非bitmap):

  [一]了解索引的工作原理:

  表:emp

Oracle數(shù)據(jù)庫中的索引詳解

  目標(biāo):查詢Frank的工資salary

  建立索引:create index emp_name_idx on emp(name);


以下圖說明節(jié)點和葉節(jié)點的關(guān)系,節(jié)點負責(zé)二叉樹的路徑,如同書目錄左邊的目錄列表 ;

葉節(jié)點就是目錄列表右邊的頁碼

Oracle數(shù)據(jù)庫中的索引詳解

索引也會很大化 因為它也要存儲些字段和字段的值

三、 唯一索引

  1、 何時創(chuàng)建:當(dāng)某列任意兩行的值都不相同

  2、 當(dāng)建立Primary Key(主鍵)或者Unique constraint(唯一約束)時,唯一索引將被自動建立

  3、 語法:CREATE UNIQUE INDEX index ON table (column);

  4、 演示

四、 組合索引

  1、 何時創(chuàng)建:當(dāng)兩個或多個列經(jīng)常一起出現(xiàn)在where條件中時,則在這些列上同時創(chuàng)建組合索引

  2、 組合索引中列的順序是任意的,也無需相鄰。但是建議將最頻繁訪問的列放在列表的最前面

  3、 演示(組合列,單獨列)

 五、 位圖索引

  1、 何時創(chuàng)建:

  列中有非常多的重復(fù)的值時候。例如某列保存了 “性別”信息。

  Where 條件中包含了很多OR操作符。

  較少的update操作,因為要相應(yīng)的跟新所有的bitmap

  2、 結(jié)構(gòu):位圖索引使用位圖作為鍵值,對于表中的每一數(shù)據(jù)行位圖包含了TRUE(1)、FALSE(0)、或NULL值。

  3、 優(yōu)點:位圖以一種壓縮格式存放,因此占用的磁盤空間比標(biāo)準(zhǔn)索引要小得多

  4、 語法:CREATE BITMAP INDEX index ON table (column[, column]...);

  5、 掩飾:

  create table bitmaptable as select * from indextable where owner in('SYS','PUBLIC');

  分析,查找,建立索引,查找

 六、 基于函數(shù)的索引

  1、 何時創(chuàng)建:在WHERE條件語句中包含函數(shù)或者表達式時

  2、 函數(shù)包括:算數(shù)表達式、PL/SQL函數(shù)、程序包函數(shù)、SQL函數(shù)、用戶自定義函數(shù)。

  3、 語法:CREATE INDEX index ON table (FUNCTION(column));

  4、 演示

  必須要分析表,并且query_rewrite_enabled=TRUE

  或者使用提示/*+ INDEX(ic_index)*/

七、 反向鍵索引

  目的:比如索引值是一個自動增長的列:

  多個用戶對集中在少數(shù)塊上的索引行進行修改,容易引起資源的爭用,比如對數(shù)據(jù)塊的等待。此時建立反向索引。

  性能問題:

  語法:

  重建為標(biāo)準(zhǔn)索引:反之不行

 八、 鍵壓縮索引

  比如表landscp的數(shù)據(jù)如下:

  site feature job

  Britten Park, Rose Bed 1, Prune

  Britten Park, Rose Bed 1, Mulch

  Britten Park, Rose Bed 1,Spray

  Britten Park, Shrub Bed 1, Mulch

  Britten Park, Shrub Bed 1, Weed

  Britten Park, Shrub Bed 1, Hoe

  ……

  查詢時,以上3列均在where條件中同時出現(xiàn),所以建立基于以上3列的組合索引。但是發(fā)現(xiàn)重復(fù)值很多,所以考慮壓縮特性。

  Create index zip_idx

  on landscp(site, feature, job)

  compress 2;

  將索引項分成前綴(prefix)和后綴(postfix)兩部分。前兩項被放置到前綴部分。

  Prefix 0: Britten Park, Rose Bed 1

  Prefix 1: Britten Park, Shrub Bed 1

  實際所以的結(jié)構(gòu)為:

  0 Prune

  0 Mulch

  0 Spray

  1 Mulch

  1 Weed

  1 Hoe

  特點:組合索引的前綴部分具有非選擇性時,考慮使用壓縮。減少I/O,增加性能。

  九、 索引組織表(IOT)

  將表中的數(shù)據(jù)按照索引的結(jié)構(gòu)存儲在索引中,提高查詢速度。

  犧牲插入更新的性能,換取查詢性能。通常用于數(shù)據(jù)倉庫,提供大量的查詢,極少的插入修改工作。

  必須指定主鍵。插入數(shù)據(jù)時,會根據(jù)主鍵列進行B樹索引排序,寫入磁盤。

 十、 分區(qū)索引

語法:

    
      Table Index
      


CREATE [UNIQUE|BITMAP] INDEX [schema.] index_name


ON [schema.] table_name
[tbl_alias]

( col
[ASC | DESC]) index_clause

index_attribs


index_clauses:
分以下兩種情況

1. Local Index

       就是索引信息的存放位置依賴于父表的Partition信息,換句話說創(chuàng)建這樣的索引必須保證父表是Partition
  
    1.1 索引信息存放在父表的分區(qū)所在的表空間。但是僅可以創(chuàng)建在父表為HashTable或者composite分區(qū)表的。
  
        LOCAL STORE IN (
    
      tablespace
    
    
)
    1.2 僅可以創(chuàng)建在父表為HashTable或者composite分區(qū)表的。并且指定的分區(qū)數(shù)目要與父表的分區(qū)數(shù)目要一致
    

LOCAL STORE IN
(tablespace)

( PARTITION
[partition

[ LOGGING|NOLOGGING
]

[ TABLESPACE
{tablespace|DEFAULT}]

[ PCTFREE
int]

[ PCTUSED
int]

[ INITRANS
int]

[ MAXTRANS
int]

[ STORAGE
storage_clause]

[ STORE IN
{tablespace_name| DEFAULT
]

[ SUBPARTITION
[subpartition [ TABLESPACE
tablespace]]]])
  
    1.3 索引信息存放在父表的分區(qū)所在的表空間,這種語法最簡單,也是最常用的分區(qū)索引創(chuàng)建方式。
  
    
      Local
      




1.4 并且指定的Partition 數(shù)目要與父表的Partition要一致

LOCAL (PARTITION
[ partition


[ LOGGING|NOLOGGING
]

[ TABLESPACE
{ tablespace
|DEFAULT}]

[ PCTFREE
int
]

[ PCTUSED
int
]

[ INITRANS
int
]

[ MAXTRANS
int
]

[ STORAGE
storage_clause
]

[ STORE IN
{ tablespace_name
| DEFAULT
]

[ SUBPARTITION
[ subpartition
[TABLESPACE tablespace
]]]])

Global Index

      索引信息的存放位置與父表的Partition信息完全不相干。甚至父表是不是分區(qū)表都無所謂的。語法如下:
    
      


GLOBAL PARTITION BY RANGE (col_list)

( PARTITION partition
VALUES LESS THAN ( value_list
)

[LOGGING|NOLOGGING]

[TABLESPACE { tablespace
|DEFAULT}]

[PCTFREE int
]

[PCTUSED int
]

[INITRANS int
]

[MAXTRANS int
]

[STORAGE storage_clause
] )
    但是在這種情況下,如果父表是分區(qū)表,要刪除父表的一個分區(qū)都必須要更新Global Index ,否則索引信息不正確
    

      
        ALTER TABLE
      
      
TableName

DROP PARTITION
PartitionName


Update Global Indexes

分區(qū)表、分區(qū)索引和全局索引:

  在一個表的數(shù)據(jù)超過過2000萬條或占用2G空間時,建議建立分區(qū)表。

createtableta(c1int,c2varchar2(16),c3varchar2(64),c4intconstraintpk_taprimarykey(c1))partitionbyrange(c1)(partitionp1valueslessthan(10000000),partitionp2valueslessthan(20000000),partitionp3valueslessthan(30000000),partitionp4valueslessthan(maxvalue));

  分區(qū)索引和全局索引:

  分區(qū)索引就是在所有每個區(qū)上單獨創(chuàng)建索引,它能自動維護,在drop或truncate某個分區(qū)時不影響該索引的其他分區(qū)索引的使用,也就是索引不會失效,維護起來比較方便,但是在查詢性能稍微有點影響。

createindexidx_ta_c2onta(c2)local(partitionp1,partitionp2,partitionp3,partitionp4);或 者createindexidx_ta_c2onta(c2)local;

  另外在create unique index idx_ta_c2 on ta(c2) local ;系統(tǒng)會報ORA-14039錯誤,這是因為ta表的分區(qū)列是c1,oracle不支持在分區(qū)表上創(chuàng)建PK主鍵時主鍵列不包含分區(qū)列,創(chuàng)建另外的約束 (unique)也不可以。

  全局索引就是在全表上創(chuàng)建索引,它可以創(chuàng)建自己的分區(qū),可以和分區(qū)表的分區(qū)不一樣,也就是它是獨立的索引。在drop或truncate某個分 區(qū)時需要創(chuàng)建索引alter index idx_xx rebuild,也可以alter table table_name drop partition partition_name update global indexes;實現(xiàn),但是要花很長時間在重建索引上。可以通過查詢user_indexes、user_part_indexes和 user_ind_partitions視圖來查看索引是否有效。

createindexidx_ta_c3onta(c3);

  或者把全局索引分成多個區(qū)(注意和分區(qū)表的分區(qū)不一樣):

createindexidx_ta_c4onta(c4)globalpartitionbyrange(c4)(partitionip1valueslessthan(10000),partitionip2valueslessthan(20000),partitionip3valueslessthan(maxvalue));

  注意索引上的引導(dǎo)列要和range后列一致,否則會有ORA-14038錯誤。

  oracle會對主鍵自動創(chuàng)建全局索引

  如果想在主鍵的列上創(chuàng)建分區(qū)索引,除非主鍵包括分區(qū)鍵,還有就是主鍵建在兩個或以上列上。

  在頻繁刪除表的分區(qū)且數(shù)據(jù)更新比較頻繁時為了維護方便避免使用全局索引。

  

Oracle數(shù)據(jù)庫中的索引詳解


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 女人寂寞偷人视频a级 | 午夜国产精品理论片久久影院 | 狠狠色狠色综合曰曰 | 国产在线一区二区三区 | 美女黄www视频 | 在线不卡视频 | 天天操综合网 | 大学生一级毛片 | 国内精品自在自线视频香蕉 | 一级毛片在线 | 国产成人精品亚洲 | 奇米第四色影视 | 欧美经典人人爽人人爽人人片 | 91亚洲在线 | 蜜桃日本一道无卡不码高清 | 99精品视频在线 | 国产深夜福利19禁在线播放 | 久久香蕉国产线看观看精品蕉 | 久久久免费观成人影院 | 99久久99久久久精品齐齐鬼色 | 四虎精品福利视频精品 | 欧美理伦 | 尤物久久99热国产综合 | 国产 日韩 欧美 亚洲 | 国产免费一级高清淫曰本片 | 鲁啊鲁啊鲁在线视频播放 | 国产呦系列 欧美呦 日韩呦 | 中文字幕亚洲日韩无线码 | 久久久久久午夜精品 | 国产亚洲自在精品久久 | 国产成人久久精品激情 | 99热久久国产精品一区 | 天天天操| 国产精品亚洲第五区在线 | 美女女女女女女bbbbbb毛片 | 亚洲爱婷婷色婷婷五月 | 国产欧美亚洲精品综合在线 | 日本不卡免费高清视频 | 久久99国产精品 | 国产成人精品久久一区二区三区 | 女人18女人毛片 |