首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《Oracle Concept》第三章 - 12

版权声明:本文为博主原创文章,遵循 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的检索。这张表的一些列上很适合创建位图索引。

代码语言:javascript
复制
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检索:

代码语言:javascript
复制
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条件中不同条件对应的索引。访问表之前,会过滤掉那些只满足部分条件,或者完全不满足条件的行。这个技术通常能显著提升响应时间,毕竟是通过位计算进行的,但是一定要注意位图索引的适用条件。

下一篇
举报
领券