在oracle中,索引是一種供服務器在表中快速查找一個行的數(shù)據(jù)庫結構,是建立在表的一列或者多列上的輔助對象,目的是加快訪問表中的數(shù)據(jù)。索引的作用:1、快速存取數(shù)據(jù);2、既可以改善數(shù)據(jù)庫性能,又可以保證列值的唯一性等等。
本教程操作環(huán)境:Windows7系統(tǒng)、Oracle 11g版、Dell G3電腦。
什么是索引?
在oracle中,索引是一種供服務器在表中快速查找一個行的數(shù)據(jù)庫結構。
-
索引是建立在表的一列或者多列上的輔助對象,目的是加快訪問表中的數(shù)據(jù)。
-
oracle 存儲索引的結構是B*數(shù)(平衡樹),而索引是由根節(jié)點、分支點和葉子點組成,上級索引塊包含下級索引塊的索引數(shù)據(jù),葉節(jié)點包含索引數(shù)據(jù)和確定行實際位置的rowid。
在數(shù)據(jù)庫中建立索引主要有以下作用:
(1)快速存取數(shù)據(jù)。
(2)減少I/O操作
(3)既可以改善數(shù)據(jù)庫性能,又可以保證列值的唯一性。
(4)實現(xiàn)表與表之間的參照完整性
(5)在使用orderby、groupby子句進行數(shù)據(jù)檢索時,利用索引可以減少排序和分組的時間。
什么時候用:
-
作為where后查詢條件的字段適合建立索引。
什么時候不用:
-
重復字段較多;
-
不作為where后查詢條件的字段;
-
表中記錄較少。
怎么用索引:
創(chuàng)建索引:
CREATE?[UNIQUE]?|?[BITMAP]?INDEX?index_name??--unique表示唯一索引 ON?table_name([column1?[ASC|DESC],column2????--bitmap,創(chuàng)建位圖索引 [ASC|DESC],…]?|?[express]) [TABLESPACE?tablespace_name] [PCTFREE?n1]?????????????????????????????????--指定索引在數(shù)據(jù)塊中空閑空間 [STORAGE?(INITIAL?n2)] [NOLOGGING]??????????????????????????????????--表示創(chuàng)建和重建索引時允許對表做DML操作,默認情況下不應該使用 [NOLINE] [NOSORT];????????????????????????????????????--表示創(chuàng)建索引時不進行排序,默認不適用,如果數(shù)據(jù)已經是按照該索引順序排列的可以使用
例如,
創(chuàng)建商品表:
--?Create?table create?table?TB_GOODS ( ??goods_id????VARCHAR2(64)?not?null, ??goods_name??VARCHAR2(256)?not?null, ??goods_price?VARCHAR2(64)?not?null, ??status??????VARCHAR2(1)?not?null );
創(chuàng)建索引:
--這里unique可以省略,若省略則索引為非唯一索引 create?index?UI_tb_goods?on?tb_goods(goods_name); --若使用unique則為唯一索引 create?unique?index?un_tb_goods?on?tb_goods(goods_name); --括號中添加兩列則為組合索引 create?unique?index?un2_tb_goods?on?tb_goods(goods_name,status); --括號中添加三列,其順序沒有關系,效果是一樣的 create?unique?index?un3_tb_goods?on?tb_goods(goods_name,goods_price,status);
唯一索引的另一個作用,控制該列不能有相同值!
查詢索引:
select?*?from?user_indexes?where?table_name='表名'; select?*?from?user_ind_columns??where?index_name='索引名';
推薦教程:《Oracle教程》