- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DBA:性能与可用性
位图索引与 B-tree 索引:选择与时间Vivek Sharma
了解每个索引的正确应用对性能会有很大影响。
一般认为,位图索引最适合于具有低相异值的列(如 GENDER、MARITAL_STATUS 和 RELATION)。然合,这种观点并不完全正确。实际上,对于那些并不经常由许多并行系统更新其数据的系统来说,总是建议采用位图索引。事实上,正如我此处所阐明的,在具有 100% 唯一值(主键的列候选键)的列上的位图索引与 B-tree 索引同样有效。
在本文中,我将提供一些示例和优化程序决策,它们对于低基数列和高基数列上的索引类型是通用的。这些示例将帮助 DBA 了解位图索引的使用实际上并不依赖于基数,而是依赖于应用程序。
比较索引
在唯一列上使用位图索引( Oracle 不建议这种方法)有几个缺点,其中一个对充足空间的需求。然而,位图索引的大小依赖于列的基数,位图索引是在该列上创建,同时进行数据分配。因此,GENDER 列上的位图索引将小于相同列上的 B-tree 索引。相反,EMPNO(主键的候选键)上的位图索引将比此列上的 B-tree 索引大得多。但是因为访问决策支持系统 (DSS) 的用户比访问交易处理 (OLTP) 系统的用户要少,所以资源对于这些应用程序不是问题。
为演示这一点,我创建了两个表 TEST_NORMAL 和 TEST_RANDOM。我使用 PL/SQL 块在 TEST_NORMAL 表中插入一百万行,然后随机在 TEST_RANDOM 表中插入这些行:
Create table test_normal (empno number(10), ename varchar2(30), sal number(10));
Begin
For i in 1..1000000
Loop
Insert into test_normal
values(i, dbms_random.string(U,30), dbms_random.value(1000,7000));
If mod(i, 10000) = 0 then
Commit;
End if;
End loop;
End;
/
Create table test_random
as
select /*+ append */ * from test_normal order by dbms_random.random;
SQL select count(*) Total Rows from test_normal;
Total Rows
----------
1000000
Elapsed: 00:00:01.09
SQL select count(distinct empno) Distinct Values from test_normal;
Distinct Values
---------------
1000000
Elapsed: 00:00:06.09
SQL select count(*) Total Rows from test_random;
Total Rows
----------
1000000
Elapsed: 00:00:03.05
SQL select count(distinct empno) Distinct Values from test_random;
Distinct Values
---------------
1000000
Elapsed: 00:00:12.07
注意 TEST_NORMAL 是条理的,而 TEST_RANDOM 表是随机创建的,因此 TEST_RANDOM 表的数据是无条理的。在上面的表中,列 EMPNO 包含完全相异的值,是很好的一个候选主键。如果您将此列定为主键,则您将创建一个 B-tree 索引而非位图索引,因为 Oracle 不支持位图主键索引。
要分析这些索引的行为,我们将执行下列步骤:
在 TEST_NORMAL 上:
在 EMPNO 列上创建一个位图索引,并使用等式谓词执行某些查询。
在 EMPNO 列上创建一个 B-tree 索引,使用等式谓词执行某些查询,并比较由查询做出的逻辑和物理输入/输出,以取出不同值集的结果。
在 TEST_RANDOM 上:
与步骤 1A 相同。
与步骤 1B 相同。
在 TEST_NORMAL 上:
与步骤 1A 相同,除了查询是使用在一定范围的谓词执行之外。
与步骤 1B 相同,除了查询是使用一定范围的谓词执行之外。现在比较统计值。
在 TEST_RANDOM 上:
与步骤 3A 相同。
与步骤 3B 相同。
在 TEST
文档评论(0)