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

Oracle數據庫中的索引詳解

系統 1916 0

一、 ROWID的概念

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

  row在數據塊中的 存儲 方式

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

  比如:OOOOOOFFFBBBBBBRRR

  OOOOOO:data object number, 對應dba_objects.data_object_id

  FFF:file#, 對應v$datafile.file#

  BBBBBB:block#

  RRR:row#

  Dbms_rowid包

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

  具體到特定的物理文件

二、 索引的概念

  1、 類似書的目錄結構

  2、 Oracle 的“索引”對象,與表關聯的可選對象,提高SQL查詢語句的速度

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

  4、 與所索引的表是相互獨立的物理結構

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

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

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

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

  7、 B-tree結構(非bitmap):

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

  表:emp

Oracle數據庫中的索引詳解

  目標:查詢Frank的工資salary

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


以下圖說明節點和葉節點的關系,節點負責二叉樹的路徑,如同書目錄左邊的目錄列表 ;

葉節點就是目錄列表右邊的頁碼

Oracle數據庫中的索引詳解

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

三、 唯一索引

  1、 何時創建:當某列任意兩行的值都不相同

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

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

  4、 演示

四、 組合索引

  1、 何時創建:當兩個或多個列經常一起出現在where條件中時,則在這些列上同時創建組合索引

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

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

 五、 位圖索引

  1、 何時創建:

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

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

  較少的update操作,因為要相應的跟新所有的bitmap

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

  3、 優點:位圖以一種壓縮格式存放,因此占用的磁盤空間比標準索引要小得多

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

  5、 掩飾:

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

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

 六、 基于函數的索引

  1、 何時創建:在WHERE條件語句中包含函數或者表達式時

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

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

  4、 演示

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

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

七、 反向鍵索引

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

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

  性能問題:

  語法:

  重建為標準索引:反之不行

 八、 鍵壓縮索引

  比如表landscp的數據如下:

  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條件中同時出現,所以建立基于以上3列的組合索引。但是發現重復值很多,所以考慮壓縮特性。

  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

  實際所以的結構為:

  0 Prune

  0 Mulch

  0 Spray

  1 Mulch

  1 Weed

  1 Hoe

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

  九、 索引組織表(IOT)

  將表中的數據按照索引的結構存儲在索引中,提高查詢速度。

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

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

 十、 分區索引

語法:

    
      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信息,換句話說創建這樣的索引必須保證父表是Partition
  
    1.1 索引信息存放在父表的分區所在的表空間。但是僅可以創建在父表為HashTable或者composite分區表的。
  
        LOCAL STORE IN (
    
      tablespace
    
    
)
    1.2 僅可以創建在父表為HashTable或者composite分區表的。并且指定的分區數目要與父表的分區數目要一致
    

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 索引信息存放在父表的分區所在的表空間,這種語法最簡單,也是最常用的分區索引創建方式。
  
    
      Local
      




1.4 并且指定的Partition 數目要與父表的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信息完全不相干。甚至父表是不是分區表都無所謂的。語法如下:
    
      


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
] )
    但是在這種情況下,如果父表是分區表,要刪除父表的一個分區都必須要更新Global Index ,否則索引信息不正確
    

      
        ALTER TABLE
      
      
TableName

DROP PARTITION
PartitionName


Update Global Indexes

分區表、分區索引和全局索引:

  在一個表的數據超過過2000萬條或占用2G空間時,建議建立分區表。

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

  分區索引和全局索引:

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

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

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

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

createindexidx_ta_c3onta(c3);

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

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

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

  oracle會對主鍵自動創建全局索引

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

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

  

Oracle數據庫中的索引詳解


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中文字幕伊人久久网 | 国产精品网址你懂的 | 国产目拍亚洲精品一区二区三区 | 日本不卡视频在线视频观看 | 一 级 黄 中国色 片 | 日本工番囗番全彩本子大全 | 国产毛片女人18水多 | 天天色天天射天天操 | 天天干在线免费视频 | 全部免费国产潢色一级 | 99视频在线观看视频 | 99高清免费国产自产拍 | 国产成人青草视频 | 欧美激情(一区二区三区) | 成人小视频免费在线观看 | 国产做爰免费视频观看 | 一级中国毛片 | 激情浪荡yin乱之合集 | 四虎免费永久在线播放 | 成人精品一区二区三区中文字幕 | 国内精品视频在线观看 | 婷婷色六月 | 天天操夜夜操天天操 | 国产在线不卡一区 | 97高清国语自产拍中国大陆 | 国产成人在线视频播放 | 日韩欧美印度一级毛片 | 久久精品一区二区三区不卡牛牛 | 国产一区二区三区在线观看精品 | 国内精品久久久久影院免费 | 天天综合色网 | 亚洲一区二区欧美 | 欧美乱妇高清无乱码视频在线 | 久久久精品国产四虎影视 | 国产大片中文字幕在线观看 | 国产a一级毛片午夜剧场14 | 中文字幕精品一区二区日本大胸 | 久久伊人成人 | 成人精品国产亚洲欧洲 | 日韩天天干| 91福利一区二区在线观看 |