前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Oracle Concept》第三章 - 12

《Oracle Concept》第三章 - 12

作者头像
bisal
发布2019-09-18 11:09:32
3970
发布2019-09-18 11:09:32
举报

版权声明:本文为博主原创文章,遵循 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条件中不同条件对应的索引。访问表之前,会过滤掉那些只满足部分条件,或者完全不满足条件的行。这个技术通常能显著提升响应时间,毕竟是通过位计算进行的,但是一定要注意位图索引的适用条件。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年09月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档