oracle學習之索引

索引

  做開發的同志們都知道索引的重要性,索引可以提高查詢速度,但是使用或者選擇不當,對數據更新等操作會造成嚴重後果。

  索引主要主要分爲幾類:普通索引(btree)、位圖索引(bitmap)、函數索引等,這裏做一個簡單地介紹。

  普通索引即btree,顧名思義結構肯定想樹一樣,有根、莖、葉子之類的。索引排序之後按照先後順序先從葉子排列,葉子排滿之後,開始往高層次排列,高層次都是排列低層次的指針,所以高度比較低,索引列是有序的。索引本身其實就是一個次序+對應數值的僞列rowid,所以建索引一般都是針對長度較小的主鍵建立索引,這樣索引體積就很小。普通全局索引多用於oltp系統中,而局部索引多用於olap系統中。而普通索引可以和分區表結合使用,提高運行速率,不過這個可是個技術活。如果可以在分區表使用過程中可以使用分區條件,那麼可建立局部索引,這時候速率最高,反之如果用不到分區條件,這時候局部索引就是累贅,要一個個查詢,最後得到結果(這時候適合建立全局索引)。

  全局索引:create  index idx_t1_tt1 on t(tt1);  (遇分區表時候分區刪除、合併、分割增刪都會使全局索引失效,這時候要使用語句更新索引alter table t truncate partition part_01 update global indexes)

  局部索引:create index idx_t2_tt1 on t(tt1) local;

  位圖索引:位圖索引就是bitmap索引,她可以在統計條數和快速定位方面做得比較優秀(例如統計員工基本情況,在性別、學歷等建立位圖所以,可以提高統計條數和定位速度),但是在位圖索引列重複度低的情況下,那麼oracle一般會規避走bitmap索引查詢。

  創建位圖索引:create bitmap index idx_bitmap_male on t(male);

  函數索引:即用利用某列的函數值作爲索引,創建語句很簡單,把原來的列換成函數就可以。create index iex_fun_date on t(to_char(date,'yyyymm'));

  索引差不多就這麼多,已經介紹完畢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章