【DB筆試面試549】在Oracle中,單列索引和複合索引分別是什麼?

  • 2019 年 10 月 10 日
  • 筆記

題目部分

在Oracle中,單列索引和複合索引分別是什麼?

答案部分

按照索引列的個數,索引可以分為單列索引和複合索引。單列索引是基於單個列所建立的索引。複合索引(Composite Indexes),也稱為連接索引、組合索引或多列索引,是在某個表中的多個列上建立的索引。複合索引中的列應該以在檢索數據的查詢中最有意義的順序出現,但在表中不必是相鄰的。若WHERE子句引用了複合索引中的所有列或前導列,則複合索引可以加快SELECT語句的數據檢索速度。所以,在複合索引的定義中所使用的列順序很重要。一般情況下,把最常被訪問和選擇性較高的列放在前面。複合索引適合於單列條件查詢返回多、組合條件查詢返回少的場景。需要注意的是,創建複合索引可以消除索引回表讀的操作,所以,在很多情況下,DBA通過創建複合索引來提高查詢SQL的性能。

在同一個表的相同列上可以創建多個複合索引,只要其索引列具有不同的排列順序即可。在某些情況下,例如,若前導列的基數很低,則資料庫可能使用索引跳躍掃描。

在Oracle中,可以使用視圖DBA_IND_COLUMNS來查詢複合索引的索引列。下面給出複合索引的一個示例:

CREATE TABLE T_CI_20170628_LHR AS SELECT * FROM DBA_OBJECTS D;  CREATE INDEX IDX_CI_20170628_LHR ON T_CI_20170628_LHR(OBJECT_ID,OBJECT_TYPE);  SELECT * FROM DBA_INDEXES D WHERE D.INDEX_NAME='IDX_CI_20170628_LHR';  SYS@orclasm > col COLUMN_NAME format a15  SYS@orclasm > SELECT D.INDEX_NAME,D.TABLE_NAME,D.COLUMN_NAME FROM DBA_IND_COLUMNS D WHERE D.INDEX_NAME='IDX_CI_20170628_LHR';  INDEX_NAME                     TABLE_NAME                     COLUMN_NAME  ------------------------------ ------------------------------ ---------------  IDX_CI_20170628_LHR            T_CI_20170628_LHR              OBJECT_ID  IDX_CI_20170628_LHR            T_CI_20170628_LHR              OBJECT_TYPE  

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