索引如何提高oracle效率

2021-06-18 08:04:45 字數 2119 閱讀 1274

喲西,找了半天找不到使用索引的sql語句,原來如此!!

建立索引不是為了在sql語句中用的,而是可以大大提高系統的效能。

第一,通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。

第二,可以大大加快 資料的檢索速度,這也是建立索引的最主要的原因。

第三,可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。

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

第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的效能。

索引是表的乙個概念部分,用來提高檢索資料的效率. 實際上,oracle使用了乙個複雜的自平衡b-tree結

構.通常,通過索引查詢資料比全表掃瞄要快. 當oracle找出執行查詢和update語句的最佳路徑時, oracle優

化器將使用索引.

同樣在聯結多個表時使用索引也可以提高效率. 另乙個使用索引的好處是,它提供了主鍵(primary

key)的唯一性驗證.除了那些long或long raw資料型別, 你可以索引幾乎所有的列. 通常, 在大型表中使

用索引特別有效.

當然,你也會發現, 在掃瞄小表時,使用索引同樣能提高效率.雖然使用索引能得到查詢效率的提高,但是

我們也必須注意到它的代價.

索引需要空間來儲存,也需要定期維護, 每當有記錄在表中增減或索引列被修改時, 索引本身也會被修改

. 這意味著每條記錄的insert ,

delete , update將為此多付出4 , 5 次的磁碟i/o .

因為索引需要額外的儲存空間和處理,那些不必要的索引反而會使查詢反應時間變慢.

譯者按:定期的重構索引是有必要的.alter index rebuild 26. 索引的操作

oracle對索引有兩種訪問模式.

索引唯一掃瞄 ( index unique scan)

大多數情況下, 優化器通過where子句訪問index.

例如:表lodging有兩個索引 : 建立在lodging列上的唯一性索引lodging_pk和建立在manager列上的非唯

一性索引lodging$manager. select *from lodgingwhere lodging = 『rose hill';

在內部 , 上述sql將被分成兩步執行, 首先 , lodging_pk 索引將通過索引唯一掃瞄的方式被訪問 , 獲

得相對應的rowid, 通過rowid訪問表的方式 執行下一步檢索.如果被檢索返回的列包括在index列

中,oracle將不執行第二步的處理(通過rowid訪問表). 因為檢索資料儲存在索引中, 單單訪問索引就可

以完全滿足查詢結果.下面sql只需要index unique scan 操作.

select lodgingfrom lodgingwhere lodging = 『rose hill';

索引範圍查詢(index range scan)適用於兩種情況:1. 基於乙個範圍的檢索2. 基於非唯一性索引的檢索

例1:select lodgingfrom lodgingwhere lodging like 『m%';

where子句條件包括一系列值, oracle將通過索引範圍查詢的方式查詢lodging_pk . 由於索引範圍查詢

將返回一組值, 它的效率就要比索引唯一掃瞄低一些.

例2:select lodgingfrom lodgingwhere manager = 『bill gates';

這個sql的執行分兩步, lodging$manager的索引範圍查詢(得到所有符合條件記錄的rowid) 和下一步同

過rowid訪問表得到lodging列的值. 由於lodging$manager是乙個非唯一性的索引,資料庫不能對它執行

索引唯一掃瞄.

由於sql返回lodging列,而它並不存在於lodging$manager索引中, 所以在索引範圍查詢後會執行乙個通

過rowid訪問表的操作.

where子句中, 如果索引列所對應的值的第乙個字元由萬用字元(wildcard)開始, 索引將不被採用.

select lodgingfrom lodgingwhere manager like 『%hanman';

在這種情況下,oracle將使用全表掃瞄.

增加索引提高查詢效率

有個分頁,跳轉頁面後執行語句大致如下 select from v bidding group product where id in select top 400 id from v bidding group product where biddingid 50515 order by id an...

增加索引提高查詢效率

有個分頁,跳轉頁面後執行語句大致如下 select from v bidding group product where id in select top 400 id from v bidding group product where biddingid 50515 order by id an...

如何提高閱讀效率

如何提高閱讀效率 現代社會,書籍 報刊 資料的數量按指數增長,以科學雜誌和學術文章為例,現在比 50年前約增加一倍,比 150年前增加了一千倍!然而,今天大部分人的閱讀速度,卻還是 100年前的水平,每分鐘一二百個詞。其實,任何乙個具有中等能力的人,都可以提高讀速。國外在 70年代初期進行過試驗 受...