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