【DB筆試面試548】在Oracle中,索引有哪3大特性?

  • 2019 年 10 月 10 日
  • 筆記

題目部分

在Oracle中,索引有哪3大特性?

答案部分

一般來說索引有3大特性,索引高度比較低、索引存儲列值及索引本身有序,對這3大特性的應用如下表所示:

索引特性

帶來的優勢

應用的常見SQL

高度比較低

索引高度低有利於索引範圍掃描,這也是通過索引可以非常迅速地從海量數據中獲取少量數據的原因。索引的高度越高,訪問索引需要讀取的數據塊數越多,效率越差。

SELECT * FROM T WHERE ID=1;

索引存儲列值

由於索引比表一般要小得多,所以在通過索引本身就可以查找到所需要的數據的情況下,可以將表看成是一個「瘦表」或「小表」,無須索引回表讀這個過程(索引回表讀是非常耗費性能的),這樣訪問路徑就會大大減少。利用該特性可以優化的SQL包括COUNT(*)、SUM(索引列)等聚合語句。

SELECT COUNT(*) FROM T;SELECT SUM(OBJECT_ID) FROM T;

索引本身有序

能夠利用索引本身已有的排序特性從而消除目標SQL的排序操作,從而優化ORDER BY等排序語句。

SELECT * FROM T WHERE OBJECT_ID>2 ORDER BY OBJECT_ID;

能夠用索引有序的特性在葉子塊的最左邊或最右邊找到最小和最大值,從而優化類型MAX、MIN語句。

SELECT MAX(OBJECT_ID) FROM T;

另外,需要特別注意的是,索引不存儲空值。

本文選自《Oracle程式設計師面試筆試寶典》,作者:李華榮。