oracle normal索引类型,Oracle学习笔记(10)管理索引
Oracle學(xué)習(xí)筆記(10)
管理索引
1、索引和表的關(guān)系:書目錄和書的關(guān)系。在數(shù)據(jù)庫中只有索引和表才能申請(qǐng)空間分配。是獨(dú)立存在的物理結(jié)構(gòu)。實(shí)現(xiàn)數(shù)據(jù)的唯一性。
2、索引:獨(dú)立于表的指針(物理結(jié)構(gòu))。指向表數(shù)據(jù):rowid。通過索引可以定位到表數(shù)據(jù)所在行的行號(hào),行號(hào)唯一標(biāo)識(shí)這一行數(shù)據(jù)所在的物理位置。優(yōu)點(diǎn):加速查找速度
缺點(diǎn):數(shù)據(jù)改變是有負(fù)載的。并非所有環(huán)境索引越多越好。數(shù)據(jù)面向讀,索引多;數(shù)據(jù)面向?qū)?#xff0c;索引少。索引結(jié)構(gòu)是b-tree結(jié)構(gòu)的(b-tree結(jié)構(gòu)兩層:非頁級(jí)nonleaf和頁級(jí)leaf)。
3、索引類型和他們的用途
索引分類:按邏輯來分類、按物理來分類
a.按邏輯來分類:單行索引和復(fù)合索引(concatenated)、唯一索引和非唯一索引、基于函數(shù)的索引、Domain域
b.按物理來分類:分區(qū)視圖或非分區(qū)視圖(放在不同段分區(qū)中,加速數(shù)據(jù)訪問的速度)、B-Tree索引(Normal常規(guī)索引or
reverse key)、位圖索引(Bitmap)
4、創(chuàng)建各種不同類型的索引
B-Tree
Index:B樹索引(適用于取值唯一性很高的欄位,多個(gè)候選鍵,數(shù)據(jù)更新代價(jià)相對(duì)比較低,用or查詢效率低,用于OLTP)
Root(根)>Branch(子目錄)>Leaf(樹葉)->指針pointer指向Table表。
Root是非頁級(jí),Branch、Leaf是頁級(jí)。
sql>select * from kong.stores where stor_id like
'7%';
Bitmap
Index:位圖索引(適用于取值唯一性很低的欄位中,比如說0\1,數(shù)據(jù)更新系統(tǒng)負(fù)擔(dān)貴,用or查詢效率高,用于數(shù)據(jù)倉庫OLAP)
sql>create index testindex1 on kong.orders(orderid)
tablespace users;
sql>conn kong/kxf_001@fox
sql>create bitmap index testbit1 on sales(payterms)
tablespace users;
sql>create index testindex2
on
stores(stor_name)
tablespace
users
pctfree
20
pctused
40
storage(initial 100k next
100k);?//注意:pctused是不能用的。
sql>del 5
sql>run
創(chuàng)建索引時(shí)應(yīng)考慮以下因素:a、平衡query查詢和DML(數(shù)據(jù)改變)需要
b、索引放在一個(gè)獨(dú)立的表空間中,把索引和數(shù)據(jù)分開,有利于并發(fā)讀寫
c、使用統(tǒng)一的分區(qū)大小:5個(gè)塊大小的整數(shù)倍或者最小的表空間分區(qū)大小
d、建立索引的過程對(duì)于大數(shù)量的索引不要做日志。(大數(shù)量的索引不要做日志)
e、建立索引的initrans 大于等于表所制定的initrans
sql>show parameter create_bit?//create_bitmap_area_size 創(chuàng)建bitmap的區(qū)域尺寸 默認(rèn)8388608(8MB)
sql>select * from order_details;
//orderid是順序的序列號(hào)(10490、10491、10492。。。),不利于查詢
sql>create index testindex3 on
orders(orderid)reverse; //做反轉(zhuǎn)索引(09401、19401、29401,。。。)
5、組織索引
(1)改變索引的存儲(chǔ)參數(shù)
sql>alter index testindex3
pctfree
20
storage(next 200k pctincrease 20);
(2)手工強(qiáng)制分配空間或清除無用的索引空間
ALTER INDEX orders_region_id_idx ALLOCATE
EXTENT(SIZE 200K DATAFILE '/DISK6/indx01.dbf');
//注意DATAFILE是原來索引所在的表空間
ALTER INDEX orders_id_idx DEALLOCATE
UNUSED;
sql>alter index testindex3 allocate extent(size
100k datafile 'd:\oracle\oradata\fox\users01.dbf');
sql>alter index testindex3 deallocate unused;
(3)索引重建:ALTER INDEX ...REBUILD...
a.可以移動(dòng)索引到一個(gè)不同的表空間
b.改善空間的應(yīng)用,把被刪除(邏輯刪除)的實(shí)體移除,把空間釋放出來
c.改變一個(gè)反轉(zhuǎn)鍵和一個(gè)正常的B樹索引之間進(jìn)行轉(zhuǎn)換,但不可以在B樹索引和位圖索引之間進(jìn)行轉(zhuǎn)換。
sql>alter index testindex3 rebuild tablespace
indx;
sql>alter indext testindex3
rebuild?reverse;?//反轉(zhuǎn)和B樹索引轉(zhuǎn)換
sql>alter indext testindex3 rebuild bitmap;
//錯(cuò),注意:位圖索引和B樹索引不可以轉(zhuǎn)換。
(4)ONLINE Rebuild of Indexes 在線重建
在舊有的索引的基礎(chǔ)上建立索引,對(duì)表不加以鎖定。在運(yùn)行過程中為了保持系統(tǒng)的并發(fā)性而引入的。
sql>alter index testindex3 rebuild
online;
注意:在線重建索引中,位圖索引和B樹索引同樣不可以轉(zhuǎn)換。
(5)索引碎片整理:
ALTER INDEX orders_id_idx
COALESCE; sql>alter index
testindex3 coalesce;
(6)檢查索引有效性:
ANALYZE INDEX orders_region_id_idx
VALIDATE
STRUCTURE;sql>analyze index
testindex3 validate structure;?//分析索引事實(shí)上是更新索引統(tǒng)計(jì)信息的過程
sql>desc index_stats?//index_stats指標(biāo)進(jìn)行更新
6、刪除索引
DROP INDEX hr.deptartments_name_idx;
建立的索引在數(shù)據(jù)查詢的時(shí)候用不到,在數(shù)據(jù)更新的時(shí)候又是負(fù)擔(dān),就一定要?jiǎng)h除這類沒用的索引。有些索引平時(shí)用的比較少,在進(jìn)行數(shù)據(jù)裝入時(shí),從其他系統(tǒng)中把大批量的數(shù)據(jù)加載進(jìn)來時(shí),可以考慮把索引刪除,再把數(shù)據(jù)load進(jìn)來,再重新建索引。因?yàn)樵诒砩辖ǖ乃饕蕉?#xff0c;在load數(shù)據(jù)時(shí)系統(tǒng)負(fù)擔(dān)越重。
sql>select * from user_indexes;//列出全部用戶索引
sql>drop index testbit1;
sql>drop index testindex2;
7、如何標(biāo)識(shí)沒有用到的索引
ALTER INDEX summit.orders_id_idx
MONITORING USEAGE?//監(jiān)視他的應(yīng)用來判定索引在系統(tǒng)中到底有沒有被用到
ALTER INDEX summit.orders_id_idx
NOMONTITORING USAGE?//取消監(jiān)視
sql>alter index testindex3
monitoring usage;
sql>l2
sql>c /monitoring/nomonitoring/
sql>run
8、從數(shù)據(jù)字典中獲取索引信息
DBA_INDEXES、DBA_IND_COLUMNS、DBA_IND_EXPRESSIONS、V$OBJECT_USAGE
sql>select * from user_indexes;
sql>select * from all_indexes;
sql>select * from dba_indexes;
sql>desc dba_ind_columns?//列出索引欄位參數(shù)
sql>select index_name,table_name,column_name from
dba_ind_columns
where
table_name='ORDERS' AND table_owner='KONG';
sql>desc orders?//列出orders表中的欄位
sql>create index testindex4 on
orders(orderdate-requireddate); //創(chuàng)建表達(dá)式時(shí)間差值的索引進(jìn)行數(shù)據(jù)查詢以加速數(shù)據(jù)訪問
總結(jié)
以上是生活随笔為你收集整理的oracle normal索引类型,Oracle学习笔记(10)管理索引的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 指纹调试 mtk(MT6763)- an
- 下一篇: 随机微分方程入门(一)布朗运动与伊藤积分