一、实验说明:

操作系统:rhel 5.4 x86

数据库:Oracle 11g R2

二、操作步骤:

首先创建一张t_btree表,并建立B-Tree索引,索引键是status:

1 SQL> create table t_btree as select * from dba_objects;
2
3 Table created.
4
5 SQL> create index status_btree on t_btree(status);
6
7 Index created.

执行两次下面的查询语句,并显示执行计划:

 1 SQL> set autotrace traceonly;
 2 SQL> select count(*) from t_btree where status='VALID';
 3
 4
 5 Execution Plan
 6 ----------------------------------------------------------
 7 Plan hash value: 2400455617
 8
 9 --------------------------------------------------------------------------------------
10 | Id  | Operation          | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
11 --------------------------------------------------------------------------------------
12 |   0 | SELECT STATEMENT      |          |       1 |       5 |      49   (0)| 00:00:01 |
13 |   1 |  SORT AGGREGATE       |          |       1 |       5 |          |         |
14 |*  2 |   INDEX FAST FULL SCAN| STATUS_BTREE | 74307 |     362K|      49   (0)| 00:00:01 |
15 --------------------------------------------------------------------------------------
16
17 Predicate Information (identified by operation id):
18 ---------------------------------------------------
19
20    2 - filter("STATUS"='VALID')
21
22 Note
23 -----
24    - dynamic sampling used for this statement (level=2)
25
26
27 Statistics
28 ----------------------------------------------------------
29      32  recursive calls
30       0  db block gets
31     261  consistent gets
32     458  physical reads
33       0  redo size
34     424  bytes sent via SQL*Net to client
35     419  bytes received via SQL*Net from client
36       2  SQL*Net roundtrips to/from client
37       0  sorts (memory)
38       0  sorts (disk)
39       1  rows processed
40
41 SQL> select count(*) from t_btree where status='VALID';
42
43
44 Execution Plan
45 ----------------------------------------------------------
46 Plan hash value: 2400455617
47
48 --------------------------------------------------------------------------------------
49 | Id  | Operation          | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
50 --------------------------------------------------------------------------------------
51 |   0 | SELECT STATEMENT      |          |       1 |       5 |      49   (0)| 00:00:01 |
52 |   1 |  SORT AGGREGATE       |          |       1 |       5 |          |         |
53 |*  2 |   INDEX FAST FULL SCAN| STATUS_BTREE | 74307 |     362K|      49   (0)| 00:00:01 |
54 --------------------------------------------------------------------------------------
55
56 Predicate Information (identified by operation id):
57 ---------------------------------------------------
58
59    2 - filter("STATUS"='VALID')
60
61 Note
62 -----
63    - dynamic sampling used for this statement (level=2)
64
65
66 Statistics
67 ----------------------------------------------------------
68       0  recursive calls
69       0  db block gets
70     180  consistent gets
71       0  physical reads
72       0  redo size
73     424  bytes sent via SQL*Net to client
74     419  bytes received via SQL*Net from client
75       2  SQL*Net roundtrips to/from client
76       0  sorts (memory)
77       0  sorts (disk)
78       1  rows processed

接着创建跟t_btree一样的表t_bmap,并创建BitMap索引。

1 SQL> create table t_bmap as select * from dba_objects;
2
3 Table created.
4
5 SQL> create bitmap index status_bmap on t_bmap(status);
6
7 Index created.

同样执行之前的语句两次:

 1 SQL> select count(*) from t_bmap where status='VALID';
 2
 3
 4 Execution Plan
 5 ----------------------------------------------------------
 6 Plan hash value: 516980546
 7
 8 ---------------------------------------------------------------------------------------------
 9 | Id  | Operation              | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
10 ---------------------------------------------------------------------------------------------
11 |   0 | SELECT STATEMENT          |         |      1 |      5 |      3   (0)| 00:00:01 |
12 |   1 |  SORT AGGREGATE           |         |      1 |      5 |         |        |
13 |   2 |   BITMAP CONVERSION COUNT     |         | 62928 |    307K|      3   (0)| 00:00:01 |
14 |*  3 |    BITMAP INDEX FAST FULL SCAN| STATUS_BMAP |        |        |         |        |
15 ---------------------------------------------------------------------------------------------
16
17 Predicate Information (identified by operation id):
18 ---------------------------------------------------
19
20    3 - filter("STATUS"='VALID')
21
22 Note
23 -----
24    - dynamic sampling used for this statement (level=2)
25
26
27 Statistics
28 ----------------------------------------------------------
29      32  recursive calls
30       0  db block gets
31      72  consistent gets
32     266  physical reads
33       0  redo size
34     424  bytes sent via SQL*Net to client
35     419  bytes received via SQL*Net from client
36       2  SQL*Net roundtrips to/from client
37       0  sorts (memory)
38       0  sorts (disk)
39       1  rows processed
40
41 SQL> select count(*) from t_bmap where status='VALID';
42
43
44 Execution Plan
45 ----------------------------------------------------------
46 Plan hash value: 516980546
47
48 ---------------------------------------------------------------------------------------------
49 | Id  | Operation              | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
50 ---------------------------------------------------------------------------------------------
51 |   0 | SELECT STATEMENT          |         |      1 |      5 |      3   (0)| 00:00:01 |
52 |   1 |  SORT AGGREGATE           |         |      1 |      5 |         |        |
53 |   2 |   BITMAP CONVERSION COUNT     |         | 62928 |    307K|      3   (0)| 00:00:01 |
54 |*  3 |    BITMAP INDEX FAST FULL SCAN| STATUS_BMAP |        |        |         |        |
55 ---------------------------------------------------------------------------------------------
56
57 Predicate Information (identified by operation id):
58 ---------------------------------------------------
59
60    3 - filter("STATUS"='VALID')
61
62 Note
63 -----
64    - dynamic sampling used for this statement (level=2)
65
66
67 Statistics
68 ----------------------------------------------------------
69       0  recursive calls
70       0  db block gets
71       6  consistent gets
72       0  physical reads
73       0  redo size
74     424  bytes sent via SQL*Net to client
75     419  bytes received via SQL*Net from client
76       2  SQL*Net roundtrips to/from client
77       0  sorts (memory)
78       0  sorts (disk)
79       1  rows processed

从上面的查询中,我们可以得到,分别给两张内容一样的表做查询的时候,在执行第二次的时候是属于软解析:

从一致性读上比较,B-Tree索引的consistent gets是180,BitMap的是6;

从Cost的消耗上看,B-Tree索引的COST是49,而BitMap的是3。

在索引键是高重复率键值(status)的时候情况下BitMap索引的效率要优于B-Tree索引。

转载于:https://www.cnblogs.com/Richardzhu/archive/2012/12/24/2831044.html

用示例说明BitMap索引的效率要优于B-Tree索引相关推荐

  1. 非索引查询如何提高效率_Python数据分析:数据库索引如何提高效率?

    - 点击上方"中国统计网"订阅我吧!- 索引在数据库中是一个很特殊的存在,它的目的就是为了提高数据查询得效率.同样,它也有弊端,更新一个带索引的表的时间比更新一个没有带索引的时间更 ...

  2. mysql索引_mysql系列:深入理解mysql 索引特性(屡试不爽的mysql索引总结)

    原标题:mysql系列:深入理解mysql 索引特性(屡试不爽的mysql索引总结) mysql为什么使用B+ Tree索引,不使用B- Tree索引? 索引顺序如何生效? 什么是覆盖索引? orde ...

  3. MySQL索引(B+Tree 索引、哈希索引、全文索引、 空间数据索引)、索引优化、优点、使用场景

    1. MySQL 索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现. 1.1 B+Tree 索引 是大多数 MySQL 存储引擎的默认索引类型. 因为不再需要 ...

  4. php普通索引和唯一索引,mysql下普通索引和唯一索引的效率对比

    昨天有位同事说,他的网页查询过程中发现普通索引和唯一索引的效率是有差别的,普通索引比唯一索引快 今天在我的虚拟机中布置了环境,测试抓图如下: 抓的这几个都是第一次执行的,刷了几次后,取平均值,效率大致 ...

  5. oracle全局索引 效率,关于插入,全局索引和局部索引的情况,那种效率高

    分区表上的索引 表可以按range,hash,list分区,表分区后,其上的索引和普通表上的索引有所不同,oracle对于分区表上的索引分为2类,即局部索引和全局索引,下面分别对这2种索引的特点和局限 ...

  6. Oracle索引梳理系列(四)- Oracle索引种类之位图索引

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  7. 【翻译】SQL Server索引进阶:第三级,聚集索引

    原文地址: Stairway to SQL Server Indexes: Level 3, Clustered Indexes 本文是SQL Server索引进阶系列(Stairway to SQL ...

  8. sorl java 建索引_solr 的客户端调用solrj 建索引+分页查询

    在 solr 3.5 配置及应用(一) 讲过一了 solr 3.5的详细配置,本节我们讲利用solr 的客户端调用solr的应用了! 一.利用SolrJ操作solr API 使用SolrJ操作Solr ...

  9. delphi报列表索引越界怎么处理_图解Elasticsearch索引机制,此篇带你领悟新世界...

    前言 随着Elastic的上市,ELK不仅在互联网大公司得到长足的发展,而且在各个中小公司都得到非常广泛的应用,甚至连"婚庆网站"都开始使用Elasticsearch了.随之而来的 ...

最新文章

  1. Linux Kernel TCP/IP Stack — L3 Layer
  2. unity安装,sdk,jdk问题
  3. 使用鸿蒙系统的家电厂商,除了华为外!谁还会用鸿蒙系统?米OV们不可能:这些巨头才会用...
  4. oracle 统计文本字符串,oracle人员权限,字符串转列,统计管理详解-Oracle
  5. 考大学计算机考试作文,机考作文
  6. ASP.NET MVC Model绑定(五)
  7. 如何实现伸缩 (折叠) 报表?
  8. 转: Nginx proxy讲解精华文章集
  9. 正视苦难,民族的心灵史——1942
  10. qcc烧录工具QCC30xx/QCC51xx全系列支持烧录工具qcc3020/3040/5124/5126qcc烧录软件
  11. msvcr71.dll文件丢失——解决办法
  12. 嵌入式硬件设计:电感
  13. php excel导入功能
  14. kafka 修改分区_kafka的分区数设置
  15. python中pass的含义_python中pass语句意义与作用(实例分析)
  16. Blackboard在线教学管理平台
  17. 他升职加薪,竟然是因为这样舔狗?
  18. RSA数据加密解密(各种语言)
  19. 【How2Pwn】DreamHack 中的Hook Overwrite问题
  20. 成都中小学教师计算机,2016成都市中小学教师继续教育网

热门文章

  1. html:(16):a标签
  2. 实例25:python
  3. Ubuntu 和 Centos 的一点差别
  4. Linux epoll的用法
  5. Java从string数组创建临时文件
  6. ASP.NET知识结构
  7. 探索未知种族之osg类生物---呼吸分解之更新循环一
  8. web APIS
  9. redis启动警告解决
  10. ASP.Net中无刷新执行Session身份验证