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

一、实验说明:

     操作系统: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用grep -v时候,想去除多个pattern

使用grep -v时候,想去除多个pattern 原创 2014年05月27日 14:01:033845 grep -v with multiple patternsgrep test somefile | grep -v -e error -e critical -e warninggrep test somefile | grep -vE (error|critical|warning)grep test somefile | grep -vE err…

ISA Server 2004 0x80004005错误

客户的一台ISA Server EE中文版,运行服务器管理出现如下问题: “ISA服务器无法加载属性页”详细信息“错误:0x80004005未指定的错误”点“继续”后提示“管理单元初始化失败”,“确定”后再次弹出“ISA服务器无法加载属性页”的提…

Java面试题16 牛客 以下java程序代码,执行后的结果是()

Java面试题16 牛客 以下java程序代码,执行后的结果是() 1 2 3 4 5 6 7 8 9 10 public class Test { public static void main(String[] args) { Object o new Object() { public boolean equals(Object o…

Singularity 介绍

"...it is impossible to predict how a singularity will affect objects in its causal future." - NCSA Cyberia Glossary 一些有用的连接: Microsoft Research Singularity Project Singularity RDK Singularity: Rethinking Dependable System De…

Hive压缩说明

为什么要压缩 在Hive中对中间数据或最终数据做压缩,是提高数据吞吐量和性能的一种手段。对数据做压缩,可以大量减少磁盘的存储空间,比如基于文本的数据文件,可以将文件压缩40%或更多。同时压缩后的文件在磁盘间传输和I/O也会大大减…

Java面试题17 牛客 下面哪个选项正确创建socket连接?

Java面试题17 牛客 下面哪个选项正确创建socket连接? Socket s new Socket(8080); Socket s new Socket(“192.168.1.1”,8080) SocketServer s new Socket(8080); Socket s new SocketServer(“192.168.1.1”,8080) 懵逼树上懵逼果,懵逼树下你…

视频素材网站

http://soft.dvedit.cn/soft/05/down-2172.html 转载于:https://www.cnblogs.com/liuguanghuiyes/archive/2008/10/04/1303830.html

kubelet源码学习(一):kubelet工作原理、kubelet启动过程

本文基于Kubernetes v1.22.4版本进行源码学习 1、kubelet工作原理 1)、kubelet核心工作 kubelet的工作核心就是一个控制循环,即:SyncLoop(图中的大圆圈)。而驱动这个控制循环运行的事件,包括:P…

算法导论课后习题解析 第四章 下

4.5-1a) $$a2,b4,f(n)\Theta(1),\log_b a \frac 12 \gt 0 $$ 符合情况1,$ T(n) \Theta (n^{1/2})$ b) $$a2,b4,f(n)\Theta(n^{1/2}),\log_b a \frac 12 $$ 符合情况2,$ T(n) \Theta (n^{1/2}\lg n)$ c) $$a2, b4, f(n)\Theta(n),\log_b a \frac 1…

Java面试题18 牛客 假定Base b = new Derived();

Java面试题18 牛客 假定Base b new Derived(); 调用执行b.methodOne()后,输出结果是什么? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 public class Base { public…

python获取当前时间和前一天时间

import time time.strftime(%Y%m%d) //获取了当前时间的年月日 datetime: 获取昨天的时间 import datetime now_time date time.datetime.now() yes_time now_time date time.timedelta(days-1) yes_time_nyr yes_time.strftime(%Y%m%d)//格式化输出

ReactOS,硬件抽象层,HAL概述

分析环境reactos0.3.4 ,i386体系] ReactOS的硬件抽象层 HAL(Hardware Abstraction Layer)位于OS与硬件的中间,和windows的hal原理基本一致,硬件抽象层隐藏特定平台的硬件接口细节,为上层的系统提供标准的稳定的虚拟硬件平台&…

[给ASP.NET 初学者的话]不要练功练了三年,才发现自己必须「砍掉重练」!....学习ASP.NET之前,请先把自己杯中的水倒掉...

这是我的文章备份,原文请看: [给ASP.NET 初学者的话]不要练功练了三年,才发现自己必须「砍掉重练」!....学习ASP.NET之前,请先把自己杯中的水倒掉 http://www.dotblogs.com.tw/mis2000lab/archive/2012/03/15/game_ove…

Java面试题19 牛客下面有关java的引用类型,说法正确的有?

Java面试题19下面有关java的引用类型,说法正确的有? A:对于一个对象来说,只要有强引用的存在,它就会一直存在于内存中 B:如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可…

MapReduce运行机制

相关链接 MapReduce中Shuffle机制详解——Map端Shuffle链接 MapReduce中Shuffle机制详解——Reduce端Shuffle链接MapReduce将作业job的整个运行过程分为两个阶段:Map阶段和Reduce阶段。按照时间顺序包括:输入分片(input split)、m…

sql优化【转】

转:http://blog.chinaunix.net/uid-540802-id-3419311.html explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在select语句前加上explain就可以了: 如: exp…

WebService Software Factory 设计草图

以下是根据WSSF设计理念,按现公司的业务需求设计的接口项目拟稿,实现细分。仅供参考。(WSSF---ASMX版) 建议用1680*1050分辩浏览 转载于:https://www.cnblogs.com/RuiLei/archive/2008/10/05/1304160.html

Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系

Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系,下列对象中不具备继承关系的是?() A:手机与小米手机 B:企业家与雷军 C:编程语言与Java D:中国与北京 类之间存在以下…

MapReduce计数器

原文链接:http://itfish.net/article/61067.html 1、MapReduce计数器是什么?计数器是用来记录job的执行进度和状态的。它的作用可以理解为日志。我们可以在程序的某个位置插入计数器,记录数据或者进度的变化情况。 2、MapReduce计数器能做什么…

编写“线围棋”程序-2-可开局

棋盘有了,怎么支持在上面落子呢? 只要解决下面3个问题就可以了: 1.响应鼠标点击事件,获得“下棋子”的动作源。 2.修改和记录棋局状态。 3.在棋盘上显示棋局的状态。 为此,直接增加一个“棋局类“,也就是对…