天天看點

plsql知識梳理-索引

 1 索引介紹

           索引是加快檢索表中資料的方式。對于包含大量資料的表來說,如果沒有索引,那麼可能對表中資料的檢索速度慢的難于忍受。

           一種用于提升查詢效率的資料庫對象,  通過快速定位資料的方法,減少磁盤I/O操作。索引資訊與表是獨立分開存放的。 Oracle資料庫會自動使用和維護索引。

          索引是一種樹狀結構,可以通過該結構迅速通路表中的資料。索引的類型可以從 邏輯設計和實體實作兩個方面來分類。

            邏輯設計方面

           從邏輯設計方面來看,也就是說主要考慮索引是如何組合的。這中情況下,可以把索引分成單列索引和複合索引、唯一性索引和非唯一性索引、基于函數的索引等類型。

           索引關鍵字值包含了一個列的索引是單列索引。

           複合索引的含義是索引關鍵字包含了表中的多個列,這個時候,索引關鍵字的順序和表中列的順序可以相同,也可以不同。在oracle9i的時候,複合索引所包含的列的數 量最多是32個。

           索引主要是排列索引關鍵字的順序,并不對這些關鍵字是否重複進行限制。如果不對索引列的重複值進行限制,這個時候的索引就是非唯一性索引。

          如果限制索引列不能出現重複值,那麼這時的索引被稱為是唯一性索引。

          實體實作方面

         從實體實作的角度來看,索引可以分為分區索引和非分區索引、b樹索引、正向索引和反向索引、位圖索引等類型等。

         對于資料量特别大的表來說,可以使用分區索引來存儲。分區索引的含義是索引可以分散在多個表空間、降低查找資料的時間和提高可管理型。非分區索引的含義是索引存儲在一個表空間中,這種管理和維護相對來說比較簡單。

         在正常的索引中,索引項是按照升序排列的,這時的索引也可以稱為正向索引。

         但是,如果希望索引中的關鍵字的排列按照反向排列,即降序排列,那麼可以建立反向索引。

 2 建立索引

         建立索引的兩種方式

        自動建立-在定義主鍵或唯一鍵限制時候系統會自動在相應的字段上建立唯一性索引。

        手動建立

        //建立索引的文法

         create [unique] index [user.]index

                on [user.]table

                       (column[asc|desc][,column[asc|desc]]...)

                  [Tablespace tablespace][Pctfree n][Initrans n]

                  [Storage storage][logging][nologging]

                  [Nosort] 

    unique,指定唯一性索引,預設的索引是非唯一性索引。

    user   索引/表的所有者。

    index  将要建立的索引名稱。

    table  在其上面建立索引的表名稱。

    column 将要索引的列名稱。

    tablespace 指定要建立索引的表空間。

    pctfree 為了存放新建立的索引項,指定建立索引時每一塊預留的空間。

    Initrans 指定每一塊上為事務預配置設定的數量,預設值是2。

    storage  指定一個存儲子句,确定如何為索引配置設定空間。

    logging 指定建立索引的操作以及之後的對索引的所有操作都記錄在重做日志檔案中。這是預設選擇。

    nosort 指定存儲在資料庫中的資料行按照升序排列,是以oracle伺服器在建立索引時不再對資料進行排序。

例子:

    //給表bigtable建立索引列 索引名為myIndex 列為id 升序排列,

   //為 唯一性索引。 使用者名,表空間 等資訊預設。 

   create unique Index myIndex

        on bigtable

            (id)

3  索引的優缺點

          優點:

                 1,  大大加快資料的檢索速度。

                 2,  建立唯一性索引,保證資料庫表中每一行資料的唯一性。

                 3,  加速表和表之間的連接配接。

                 4,  在使用分組和排序子句進行資料檢索時,可以顯著減少查詢中分組和排序的時間。

        缺點:

               1,  索引需要占實體空間。

               2,  當對表中的資料進行增加、删除和修改的時候,索引也要動态的維護,降低了資料的維護速度。