博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一周以来工作总结--关于位图索引
阅读量:6859 次
发布时间:2019-06-26

本文共 1071 字,大约阅读时间需要 3 分钟。

      我曾经迷茫于一个问题,为什么有的时候明明有索引,却无法提升效率。后来我在很多书上和论坛上看到,索引分为3种,默认的是B树索引,这个类型的索引在对付重复很多很多的列的时候并没有任何优势,比如性别列这个只有两个值(不排除会有第三值)的列。而这种重复度很高的列在我平时的生产系统中非常多,比如运营商的行政区列,西安市只有市区,户县,周至,蓝田等几个行政区,这种重复在百万级甚至千万级的表中属高重复的。那么这种情况就要交给位图索引来对付了。

      下面是我在自己机器上做的一个实验:

      1 首先建立三张表,table1来自于dba_objects中object_type为table和index的,然后用如下的语句将这个表做大:

      

BEGIN  FOR I IN 1 .. 10 LOOP    INSERT INTO TABLE1      SELECT * FROM TABLE1;    COMMIT;  END LOOP;END;

      2 然后建立table2和table3,都来自于table1。

      3 table1不建立索引,table2建立B树索引,table3建立位图索引,建立到object_type列上:

CREATE INDEX idx_1 ON table2(object_type);CREATE BITMAP INDEX idx_2 ON table3(object_type);

     之后用这个SQL语句查询数据,看他们的执行计划:

    

select * from tablen where object_type = 'INDEX';

     本来打算用autotrace的,但是我的本机受不了那么大的SQL,会报ora-04030错误,所以这里用explain。

    

      可以明显的看到,使用B树索引的table2的执行计划中并没有使用索引,而是和table1一样,采取了全表扫描。而table3的执行计划可以卡到,cost只有11611,也就是上面两个的一半不到吧,可见效果还是非常好的。随着数据量的逐渐增大,索引的效果才会体现出来。

      据说位图索引会比较小:

     

      事实还确实是这样子。

      我觉得还有必要做一个实验,就是测试在一个类似于序列号的列上采用位图索引,B树索引和不带索引的查询,对比一下这个时候的效率。但是我今天心情很糟糕,所以周末再说吧。

      欢迎广大oracle从业者和爱好者加入我们的讨论群:120244471

转载于:https://www.cnblogs.com/wingsless/archive/2012/10/25/2740070.html

你可能感兴趣的文章
项目管理学习笔记之中的一个.项目管理综述
查看>>
matlab 工具之各种降维方法工具包,下载及使用教程,有PCA, LDA, 等等。。。...
查看>>
C语言 数组之无限循环
查看>>
List与String的相互转换
查看>>
换行符导致的脚本错误调试
查看>>
Android——Android Sutido:[2]导入eclipse项目篇
查看>>
setsockopt之 TCP_KEEPIDLE/TCP_KEEPINTVL/TCP_KEEPCNT
查看>>
typeid详解
查看>>
SQL Server中的Image数据类型的操作
查看>>
Atitit.html css 浏览器原理理论概论导论attilax总结
查看>>
求解圆圈中最后剩下的数字
查看>>
jQuery入门第二天
查看>>
boost中的智能指针
查看>>
Windows下Php安装mongodb扩展失败
查看>>
discuz安装步骤
查看>>
IntelliJ IDEA修改Output输出缓存区大小【应对:too much output to process】
查看>>
计算机网络概述
查看>>
(转) WTF is computer vision?
查看>>
html标签的target属性应用
查看>>
长连接
查看>>