­

《Oracle Concept》第三章 – 12

  • 2019 年 10 月 5 日
  • 筆記

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/bisal/article/details/100788405

背景:

按照《Oracle Concept》的結構一起了解Oracle資料庫,這是學習Oracle從入門到精通的基礎。

前言《Introduction to Oracle Database》的歷史文章

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

第二章《Tables and Table Clusters》 歷史文章

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

第三章《Indexes and Index-Organized Tables》歷史文章:

本文主題:第三章《Indexes and Index-Organized Tables》 – Overview of Indexes。

單表點陣圖索引

如下示例展示了對錶sh.customers的檢索。這張表的一些列上很適合創建點陣圖索引。

SQL> SELECT cust_id, cust_last_name, cust_marital_status, cust_gender    2  FROM   sh.customers    3  WHERE  ROWNUM < 8 ORDER BY cust_id;       CUST_ID CUST_LAST_ CUST_MAR C  ---------- ---------- -------- -           1 Kessel              M           2 Koch                F           3 Emmerson            M           4 Hardy               M           5 Gowen               M           6 Charles    single   F           7 Ingram     single   F    7 rows selected.

cust_marital_status和cust_gender列的重複值很少,而cust_id和cust_last_name列的重複值很多。因此cust_marital_status和cust_gender列很適合創建點陣圖索引。如果在其他列上創建點陣圖索引,可能不會有作用。取而代之的是,在這些重複值很高的列上,創建一個唯一的B樹索引,可能會更有利於數據的檢索性能。

表3-2展示了cust_gender列的點陣圖索引。他包含了兩個獨立的點陣圖,每個位代表了一個性別。

Table 3-2 點陣圖示例

Value

Row 1

Row 2

Row 3

Row 4

Row 5

Row 6

Row 7

M

1

0

1

1

1

0

0

F

0

1

0

0

0

1

1

映射函數會將點陣圖中的每個位轉換成customers表的一個rowid。每個位的值依賴於表中相應行的取值。例如,M值的點陣圖含有1作為第一個位,因為在customers表中的第一行性別是M。點陣圖cust_gender='M'將用0作為第2、6和7行的位,因為這些行的值不是M。

注意:

不像B樹索引,點陣圖索引能包含那些完全是NULL空值的鍵。對空值索引對一些SQL語句來說可能會是有用的,例如使用COUNT聚合函數的檢索。

一個調查顧客統計趨勢的分析員可能會問,「有多少女性顧客是單身或者離異?」這個問題能用如下的SQL檢索:

SELECT COUNT(*)  FROM   customers  WHERE  cust_gender = 'F'  AND    cust_marital_status IN ('single', 'divorced');

如同表3-3所示,點陣圖索引能在結果集點陣圖中對值是1的值進行統計來有效地處理這個查詢。為了明確哪些顧客滿足條件,Oracle會使用結果集點陣圖來訪問這張表。

表3-3,點陣圖索引示例

Value

Row 1

Row 2

Row 3

Row 4

Row 5

Row 6

Row 7

M

1

0

1

1

1

0

0

F

0

1

0

0

0

1

1

single

0

0

0

0

0

1

1

divorced

0

0

0

0

0

0

0

single or divorced, and F

0

0

0

0

0

1

1

點陣圖索引能有效地合併WHERE條件中不同條件對應的索引。訪問表之前,會過濾掉那些只滿足部分條件,或者完全不滿足條件的行。這個技術通常能顯著提升響應時間,畢竟是通過位計算進行的,但是一定要注意點陣圖索引的適用條件。