B-tree索引与Bitmap索引的对比测试
昨天发现一条语句没有走索引,检查发现表没有建相应索引,先建立B-tree索引,测试发现是全表扫描,检查表数据发现此字段的值只有2个,删除原索引又建立bitmap索引,发现还是全表扫描,再次检查数据发现2个值基本各占一半,因此是否有索引都是全表扫描。随后又做了下面的测试加以验证,从dba_objects建立test_objects表,反复插入120万数据,大概130M,测试如下(oracle版本,10g、11g):
--1.无索引情况:
SQL> select * from scott.test_objects t where t.owner='SYS';
已选择550872行。 执行计划
---------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time|
----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 694K| 117M| 4636 (3)| 00:00:56 |
|* 1 | TABLE ACCESS FULL| TEST_OBJECTS | 694K| 117M| 4636 (3)| 00:00:56 |
----------------------------------------------------------------------------------
统计信息 7 recursive calls
0 db block gets
57601 consistent gets
0 physical reads
327660 redo size
26774068 bytes sent via SQL*Net to client
404349 bytes received via SQL*Net from client
36726 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
550872 rows processed
---2. 为owner字段建立bitmap 索引(nologging 下用时0.4秒多):
SQL> select * from scott.test_objects t where t.owner='SYS';
已选择550872行。执行计划
-----------------------------------------------------------
Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 694K| 117M| 2214 (1)| 00:00:27 |
| 1 | TABLE ACCESS BY INDEX ROWID | TEST_OBJECTS | 694K| 117M| 2214 (1)| 00:00:27 |
| 2 | BITMAP CONVERSION TO ROWIDS| | | | | |
|* 3 | BITMAP INDEX SINGLE VALUE | IDX_OWNER | | | | |
---------------------------------------------------------------------------------------------
统计信息 13 recursive calls
0 db block gets
50196 consistent gets
48 physical reads
0 redo size
58672868 bytes sent via SQL*Net to client
404349 bytes received via SQL*Net from client
36726 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
550872 rows processed
--3. 为owner字段建立普通索引(nologging 下用时12秒多)::
SQL> select * from scott.test_objects t where t.owner='SYS' order by created desc;
已选择550872行。执行计划
------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 694K| 117M| | 31701 (1)| 00:06:21 |
| 1 | SORT ORDER BY | | 694K| 117M| 278M| 31701 (1)| 00:06:21 |
|* 2 | TABLE ACCESS FULL| TEST_OBJECTS | 694K| 117M| | 4636 (3)| 00:00:56 |
-------------------------------------------------------------------------------------------
统计信息
72 recursive calls
178 db block gets
16832 consistent gets
11444 physical reads
0 redo size
24811026 bytes sent via SQL*Net to client
404349 bytes received via SQL*Net from client
36726 SQL*Net roundtrips to/from client
0 sorts (memory)
1 sorts (disk)
550872 rows processed
---分析表后看执行结果:
SQL> analyze table scott.test_objects compute statistics for all indexes;
--普通索引:
SQL> select * from scott.test_objects t where t.owner='SYS' order by created desc;
已选择550872行。执行计划
-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 539K| 47M| | 16247 (2)| 00:03:15 |
| 1 | SORT ORDER BY | | 539K| 47M| 129M| 16247 (2)| 00:03:15 |
|* 2 | TABLE ACCESS FULL| TEST_OBJECTS | 539K| 47M| | 4622 (2)| 00:00:56 |
-------------------------------------------------------------------------------------------
统计信息
64 recursive calls
71 db block gets
16736 consistent gets
11904 physical reads
0 redo size
24810760 bytes sent via SQL*Net to client
404349 bytes received via SQL*Net from client
36726 SQL*Net roundtrips to/from client
0 sorts (memory)
1 sorts (disk)
550872 rows processed
--bitmap索引:
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 539K| 47M| | 16247 (2)| 00:03:15 |
| 1 | SORT ORDER BY | | 539K| 47M| 129M| 16247 (2)| 00:03:15 |
|* 2 | TABLE ACCESS FULL| TEST_OBJECTS | 539K| 47M| | 4622 (2)| 00:00:56 |
-------------------------------------------------------------------------------------------
--改变sql语句后:
SQL> select t.* from scott.test_objects t where t.owner='ICDMAIN' order by timestamp desc;
已选择216行。执行计划
-------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 93 | 2 (50)| 00:00:01 |
| 1 | SORT ORDER BY | | 1 | 93 | 2 (50)| 00:00:01 |
| 2 | TABLE ACCESS BY INDEX ROWID | TEST_OBJECTS | 1 | 93 | 1 (0)| 00:00:01 |
| 3 | BITMAP CONVERSION TO ROWIDS| | | | | |
|* 4 | BITMAP INDEX SINGLE VALUE | IDX_OWNER | | | | |
----------------------------------------------------------------------------------------------
把索引多次删除并分析,情况基本一样,得出下面结果:
1. 第一次建立bitmap索引后,查询走了索引,后来的查询就再也没有走索引;
2. nologging状态下建bitmap用时非常小,而b-tree索引用时较大;
3. 在排序状态下,要占用原表2倍大的TempSpc表空间,此表数据130多M,占用tempspe为278M。再此查询时占用temp空间为129M,因为共享池中已经存在了。
4. 改变sql语句的查询条件后,走了索引(sys为550872行,icdmain为216行),也进一步验证了下面的原则:
索引范围扫描的总体原则是:
1. 对于原始排序的表, 仅读取少于表记录数40%的查询应该使用索引范围扫描。反之,读取记录数目多于表记录数的40%的查询应该使用全表扫描。
2. 对于未排序的表, 仅读取少于表记录数7%的查询应该使用索引范围扫描。反之,读取记录数目多于表记录数的7%的查询应该使用全表扫描。
转载于:https://blog.51cto.com/srsunbing/724473
相关文章:

python 将字符串转换成字典dict
JSON到字典转化: 输出dict类型 dictinfo json.loads(json_str)字典到JSON转化: 输出str类型 # 比如: info {name : jay, sex : male, age: 22} jsoninfo simplejson.dumps(info) print jsoninfo Unicode到字典的转化: json.loa…

pidstat 命令详解(转载)
转自https://www.jianshu.com/p/3991c0dba094 pidstat 概述 pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运…

Oracle中table的大小计算方式
1. Check the size of each table on specific schema ; SQL> select segment_name,bytes/1024/1024 as mb from user_segments; SEGMENT_NAME MB -------------------- ---------- SALES 542. 转载于:https://www.cnblogs.com/jeff…

python编码问题无法复现_Python编码问题详解
1. 基本概念 字符集(Character set) 解释:文字和符合的总称 常见字符集: Unicode字符集 ASCII字符集(Unicode子集) GB2312字符集 编码方法(Encoding) 解释:将字符对应到字…

重新开始 2011/11/25
在csdn上写过几篇文章,始终没有坚持下来,也是由于自己没有一个明确的目标的缘故;当自己感觉乱的时候,总是想改变点东西,重新开始,改变了博客类的东西就真的能重新开始吗?现在我想换个博客就换个…

【转载】springboot:如何优雅的使用mybatis
这两天启动了一个新项目因为项目组成员一直都使用的是mybatis,虽然个人比较喜欢jpa这种极简的模式,但是为了项目保持统一性技术选型还是定了 mybatis。到网上找了一下关于spring boot和mybatis组合的相关资料,各种各样的形式都有,…

c3p0连接池用法
使用连接池的时候并不是在代码中不用获取/释放数据库连接,而是在代码中向连接池申请/释放连接,对于代码而言,可以把连接池看成数据库。 换句话说,连接池就是数据库的代理,之所以要使用这个代理是因为直接向数据库申请/…

我所理解的字符编码
1,Ascii和ebcic. 为了方便交流,美国人发明了ASCII编码,后来被确认为国际标准。后来以发明了EBCDIC编码。 一般地说,开放的操作系统(LINUX 、WINDOWS等)采用ASCII 编码,而大型主机系统࿰…

void函数调用时显示不允许使用不完整的_C语言的角落——这些C语言不常用的特性你知道吗?...
变长参数列表头文件定义了一些宏,当函数参数未知时去获取函数的参数变量:typedef va_list宏:va_start()va_arg()va_end()va_list类型通过stdarg宏定义来访问一个函数的参数表,参数列表的末尾会用省略号省略 (va_list用来保存va_st…

centos下为firefox安装flash插件的几种方法
首先去官网去下载RPM格式的安装包,比如:flash-plugin-11.1.102.55-release.i386.rpm,默认下载位置是该用户的下载文件夹。 方法一:用gnome 双击该文件,按提示操作即可。 方法二:命令行,在该文件…
eoLinker AMS 专业版V3.3发布:分享项目可以测试并选择分享内容等
eoLinker AMS是集API文档管理、API自动化测试、开发协作三位一体的综合API开发管理平台,是中国最大的在线API管理平台。目前eoLinker AMS已经为来自全球的超过两万家企业托管超过一百万的API,我们感谢每个曾经以及正在支持我们的企业以及开发者朋友&…

MyBatis基础-CRUD
一、mybatis 环境搭建步骤 第一步:创建 maven 工程第二步:导入坐标第三步:编写必要代码(实体类和持久层接口)第四步:编写 SqlMapConfig.xml第五步:编写映射配置文件第六步:编写测…
python答题系统的代码_Python考试系统自动答题(教务处)
要求 某学校要求登录教务处网站 做一个测试题 30分钟300道题,240分几个,题量不少,题还不好做。 研究发现原来在网站上有题库 但是一道题只有6s 的时间作答 边查边做时间不够 人生苦短,何不Python当歌? 来个自动答题的智…

((ios开发学习笔记九)) Simple TableView 实现(附 实例源码)
实现效果: 实现过程: Step One 创建单个窗体项目 Step Two 创建control 接口 Step Three 创建窗体和关联关系 Step four 实现table view 的接口 control 初始化选择数据 实现Data Source 部分 实现TableView委托部分 源码下载 TestTableView.zip转载于:…

24个为Web开发人员准备的CSS3实用教程
本文搜集了一些关于CSS3的最新教程。你可以根据这些教程或技术来实现网页设计,包括:文字阴影、圆角框、盒模型尺寸计算(box sizing)、透明效果处理、多重背景、边框图像等。以下这些都是非常实用的CSS3教程,提供了许多…

前端基础之JQuery
一、什么是JQuery [1] jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team。 [2] jQuery是一种新型的JavaScript库。jq是用js写的,能用jq实现,用js都能…

测试linux下磁盘的读写速率
1) 通过df -h命令查看磁盘情况Filesystem Size Used Avail Use% Mounted on/dev/sda4 289G 61G 214G 23% /tmpfs 7.8G 0 7.8G 0% /dev/shm/dev/sda2 969M 62M 857M 7% /boot/dev/sda1 …

multipart request_Request和Response
Response讲解7.1 Response简介定义辅助 servlet 将响应发送到客户端的对象。servlet 容器创建 ServletResponse 对象,并将它作为参数传递给 servlet 的 service 方法。 要发送 MIME 正文响应中的二进制数据,请使用 #getOutputStream 返回的 ServletOutpu…

SharePoint 客户端经常弹出Windows验证登录框问题
场景描述: Site工作人员UserA创建了一个Task,并且Assign给UserB。UserB接到来自Task List的邮件通知。这时UserA发现Assign的人错了,重新修改Task Item,将任务重新Assign给另外一个用户UserC,并且同时收回了UserB的访问…

SkFlattenable /Registrar/
/** \class SkFlattenableSkFlattenable is the base class for objects that need to be flattenedinto a data stream for either transport or as part of the key to thefont cache.*/ class SK_API SkFlattenable : public SkRefCnt {}以SkFlattenable为基类的对象是&…

启动 ServiceFabric Windows服务报1053
Remote Procedure Call (RPC) Locator和 Windows Firewall是否启动。 以管理员身份运行PowerShell,输入Unregister-ScheduledTask FabricCounters,然后输入Y。 到这一步基本OK了 右下角reset sf后查看是否存在 X:\SfDevCluster\Data\ImageStoreShare 文件…

Spring基础面试题(一)
Spring是什么?Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于…

C#线程间操作无效: 从不是创建控件 XX 的线程访问它
转自:http://www.arasplm.net/index.php/zh/community/myblog/c-xx-.html 前些天做的要使用到线程的项目,现在和大家分享一下感受! 以下面小列子为例,给出这个问题的解决办法。下面的列子是以一个计数器为列讲解的。 public Form1…

boost安装_【环境搭建】源码安装Boost
写C的话boost是必不可少的,本文将boost的安装过程用写成脚本,直接一行命令解决整个编译安装过程:sudo bash boost-linux-installer.sh下面是boost-linux-installer.sh的内容:#!/usr/bin/env bash

css新闻列表优化-突破思维新方法更利于搜索引擎
效果图如下: 也许你会认为这个是很简单的,呵呵那是因为一般写这个列表的时候用的都是时间写在前面,标题写在后面,那样对于显示来说是先有时间后有标题的,对搜索引擎不是很友好。 老方法大概是这样的: html代…

STL使用记录
1,map 对map实在不熟。。。赶紧记录一下用法吧。 后来再发现新的用法再补充吧 定义: map<int, int> m; 其中的int可以为自定义的任何类型。 m[key值类型的变量] value值; 但是注意如果key值是自定义的结构体的话,一定要重载…

Linux tcpdump命令详解与Wireshark
简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过…

dubbo yml配置_利用springboot+dubbo,构建分布式微服务,全程注解开发(一)
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。一、先来一张图说起 Dubbo,相信大家都不会陌生࿰…

treeview 保持选中状态
发现当treeview控件失去焦点的时候,会丢失选中状态的指示(条目的蓝色背景)。如果想要保持,只要设置treeview的一个属性即可: this.treeView1.HideSelection false; 但是,发现阴影很浅,但是聊胜…

1-2-Active Directory 域服务准备概述
参照: http://technet.microsoft.com/zh-cn/library/gg398869.aspx Active Directory 域服务准备概述 上一次修改主题: 2010-12-09 要为 Microsoft Lync Server 2010 部署准备 Active Directory 域服务 (AD DS),必须按照特定顺序执行三个步骤。 下表介绍…