<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
    什么是索引:
    ?
    ??? 索引是一種與表有關的數據庫結構,是建立在表的一列或多個列上的輔助對象。使用索引可以有一下好處:
    ??? 1、加快查詢速度;
    ??? 2、減少I/O操作
    ??? 3、消除磁盤排序
    ?
    索引的創建格式: ?
    ?
    ??? CREATE UNIUQE | BITMAP INDEX <schema>.<index_name>
    ??? ON <schema>.<table_name>
    ??? (<column_name> | <expression> ASC | DESC,
    ???? <column_name> | <expression> ASC | DESC,...)
    ??? TABLESPACE <tablespace_name>
    ??? STORAGE <storage_settings>
    ??? LOGGING | NOLOGGING
    ??? COMPUTE STATISTICS
    ??? NOCOMPRESS | COMPRESS<nn>
    ??? NOSORT | REVERSE
    ??? PARTITION | GLOBAL PARTITION<partition_setting>
    ?
    ??? UNIQUE | BITMAP:指定UNIQUE為唯一值索引,BITMAP為位圖索引,省略為B-Tree索引。
    ??? <column_name> | <expression> ASC | DESC:可以對多列進行聯合索引,當為expression時即“基于函數的索引”
    ??? TABLESPACE:指定存放索引的表空間(索引和原表不在一個表空間時效率更高)
    ??? STORAGE:可進一步設置表空間的存儲參數
    ??? LOGGING | NOLOGGING:是否對索引產生重做日志(對大表盡量使用NOLOGGING來減少占用空間并提高效率)
    ??? COMPUTE STATISTICS:創建新索引時收集統計信息
    ??? NOCOMPRESS | COMPRESS<nn>:是否使用“鍵壓縮”(使用鍵壓縮可以刪除一個鍵列中出現的重復值)
    ??? NOSORT | REVERSE:NOSORT表示與表中相同的順序創建索引,REVERSE表示相反順序存儲索引值
    ??? PARTITION | NOPARTITION:可以在分區表和未分區表上對創建的索引進行分區
    ?
    ??? 使用USER_IND_COLUMNS查詢某個TABLE中的相應字段索引建立情況
    ??? 使用DBA_INDEXES/USER_INDEXES查詢所有索引的具體設置情況。
    ?
    ?
    ?
    ??? 在Oracle中的索引可以分為:B樹索引位圖索引反向鍵索引基于函數的索引簇索引全局索引局部索引等,下面逐一講解:
    ?
    一、B樹索引:
    ?
    ??? 最常用的索引,各葉子節點中包括的數據有索引列的值和數據表中對應行的ROWID,簡單的說,在B樹索引中,是通過在索引中保存排過續的索引列值與相對應記錄的ROWID來實現快速查詢的目的其邏輯結構如圖:
    ??? index-1.gif
    ??? 可以保證無論用戶要搜索哪個分支的葉子結點,都需要經過相同的索引層次,即都需要相同的I/O次數。
    ?
    ??? B樹索引的創建示例:
    ??? create index ind_t on t1(id) ;
    ?
    ??? 注1:索引的針對字段創建的,相同字段不能創建一個以上的索引
    ??? 注2:默認的索引是不唯一的,但是也可以加上unique,表示該索引的字段上沒有重復值(定義unique約束時會自動創建);
    ??? 注3:創建主鍵時,默認在主鍵上創建了B樹索引,因此不能再在主鍵上創建索引
    ?
    ?
    二、位圖索引:
    ?
    ??? 有些字段中使用B樹索引的效率仍然不高,例如性別的字段中,只有“男、女”兩個值,則即便使用了B樹索引,在進行檢索時也將返回接近一半的記錄。
    ??? 所以當字段的基數很低時,需要使用位圖索引。(“低”的標準是取值數量 < 行數*1%)
    ?
    ??? index-2.gif
    ??? 位圖索引的邏輯結構如上圖所示:索引中不再記錄rowid和鍵值,而是將每個值作為一列,用0和1表示該行是否等于該鍵值(0表示否;1表示是)。其中位圖索引的行順序與原表的行順序一致,可以在查詢數據的過程中對應計算出行的原始物理位置。
    ?
    ??? 位圖索引的創建示例:
    ??? create bitmap index ind_t on t1(type);
    ?
    ??? 注:位圖索引不可能是唯一索引,也不能進行鍵值壓縮
    ?
    ?
    三、反向鍵索引:
    ?
    ??? 考慮這個情況:某一字段的值是1-1000順序排列,建立B樹索引后依舊遞增,到后來該B數索引不斷在后面增加分支,會形成如下如的不對稱樹:
    ??? index-3.gif
    ?
    ??? 反向鍵索引是一種特殊的B樹索引,在存儲構造中與B樹索引完全相同,但是針對數值時,反向鍵索引會先反向每個鍵值的字節,然后對反向后的新數據進行索引。例如輸入2008則轉換為8002,這樣當數值一次增加時,其反向鍵在大小中的分布仍然是比較平均的。
    ?
    ??? 反向鍵索引的創建示例:
    ??? create index ind_t on t1(id) reverse;
    ?
    ??? 注:鍵的反轉由系統自行完成。對于用戶是透明的。
    ?
    ?
    四、基于函數的索引:
    ?
    ??? 有的時候,需要進行如下查詢:select * from t1 where to_char(date,'yyyy')>'2007';
    ??? 但是即便在date字段上建立了索引,還是不得不進行全表掃描。在這種情況下,可以使用基于函數的索引。其創建語法如下:
    ??? create index ind_t on t1(to_char(date,'yyyy'));
    ?
    ??? 注:簡單來說,基于函數的索引,就是將查詢要用到的表達式作為索引項
    ?
    ?
    五、全局索引和局部索引:
    ?
    ??? 這個索引貌似很復雜,其實很簡單。總得來說一句話,就是無論怎么分區,都是為了方便管理。
    ?
    ??? 具體索引和表的關系有三種:
    ??? 1、局部分區索引:分區索引和分區表1對1
    ??? 2、全局分區索引:分區索引和分區表N對N
    ??? 3、全局非分區索引:非分區索引和分區表1對N
    ?
    ??? 創建示例:
    ?
    ??? 首先創建一個分區表
    ??? create table student
    ??? (
    ?????stuno number(5),
    ?????sname vrvhar2(10),
    ?????deptno number(5)
    ??? )
    ??? partition by hash (deptno)
    ??? (
    ?????partition part_01 tablespace A1,
    ?????partition part_02 tablespace A2
    ??? );
    ?
    ??? 創建局部分區索引(1v1):
    ??? create index ind_t on student(stuno)
    ??? local(
    ???? partition part_01 tablespace A2,
    ???? partition part_02 tablespace A1
    ??? ); --local后面可以不加
    ?
    ??? 創建全局分區索引(NvN):
    ??? create index ind_t on student(stuno)
    ??? global partition by range(stuno)
    ??? (
    ?????partition p1 values less than(1000) tablespace A1,
    ?????partition p2 values less than(maxvalue) tablespace A2
    ??? ); --只可以進行range分區
    ?
    ??? 創建全局非分區索引(1vN)
    ??? create index ind_t on student(stuno) GLOBAL;
    ?
    ??? 注:全局非分區索引不能是位圖索引,但可以是唯一索引
    ?
    ?




    -The End-

    posted on 2008-10-11 20:07 decode360-3 閱讀(333) 評論(0)  編輯  收藏 所屬分類: Oracle
    主站蜘蛛池模板: 亚洲熟妇AV乱码在线观看| 亚洲国产精品成人综合久久久 | 亚洲精品美女久久久久久久| 一级做a爰片久久免费| 在线观看www日本免费网站| 吃奶摸下高潮60分钟免费视频| 亚洲国产成人精品无码区在线观看| 亚洲精品国产国语| 无码专区AAAAAA免费视频| 四虎国产精品免费视| 91亚洲精品自在在线观看| 久久国产乱子伦精品免费午夜| 丁香花免费完整高清观看 | 香蕉蕉亚亚洲aav综合| 青青免费在线视频| 91在线品视觉盛宴免费| 91在线亚洲综合在线| 青青草国产免费久久久91| 亚洲国产中文在线视频| 最新猫咪www免费人成| 久久久久久久亚洲Av无码 | 日韩在线一区二区三区免费视频 | 色噜噜亚洲男人的天堂| 亚洲免费在线视频观看| 亚洲精品乱码久久久久久久久久久久| 精品久久久久亚洲| 午夜视频免费成人| 亚洲免费电影网站| 免费乱码中文字幕网站| 国产性生大片免费观看性| 亚洲精品第一国产综合境外资源| 亚洲色成人网站WWW永久四虎 | 亚洲jjzzjjzz在线播放| 最近2019中文字幕免费直播| 亚洲av伊人久久综合密臀性色 | 91热久久免费精品99| 亚洲综合无码一区二区痴汉| 亚洲国产精品无码久久青草| 国产亚洲男人的天堂在线观看 | 在线免费观看国产视频| 在线亚洲午夜片AV大片|