一周以来工作总结--关于位图索引
2012-10-25 20:40
204 查看
我曾经迷茫于一个问题,为什么有的时候明明有索引,却无法提升效率。后来我在很多书上和论坛上看到,索引分为3种,默认的是B树索引,这个类型的索引在对付重复很多很多的列的时候并没有任何优势,比如性别列这个只有两个值(不排除会有第三值)的列。而这种重复度很高的列在我平时的生产系统中非常多,比如运营商的行政区列,西安市只有市区,户县,周至,蓝田等几个行政区,这种重复在百万级甚至千万级的表中属高重复的。那么这种情况就要交给位图索引来对付了。
下面是我在自己机器上做的一个实验:
1 首先建立三张表,table1来自于dba_objects中object_type为table和index的,然后用如下的语句将这个表做大:
2 然后建立table2和table3,都来自于table1。
3 table1不建立索引,table2建立B树索引,table3建立位图索引,建立到object_type列上:
之后用这个SQL语句查询数据,看他们的执行计划:
本来打算用autotrace的,但是我的本机受不了那么大的SQL,会报ora-04030错误,所以这里用explain。
![](http://pic002.cnblogs.com/images/2012/352291/2012102520314782.png)
![](http://pic002.cnblogs.com/images/2012/352291/2012102520324439.png)
![](http://pic002.cnblogs.com/images/2012/352291/2012102520330711.png)
可以明显的看到,使用B树索引的table2的执行计划中并没有使用索引,而是和table1一样,采取了全表扫描。而table3的执行计划可以卡到,cost只有11611,也就是上面两个的一半不到吧,可见效果还是非常好的。随着数据量的逐渐增大,索引的效果才会体现出来。
据说位图索引会比较小:
![](http://pic002.cnblogs.com/images/2012/352291/2012102520384647.png)
事实还确实是这样子。
我觉得还有必要做一个实验,就是测试在一个类似于序列号的列上采用位图索引,B树索引和不带索引的查询,对比一下这个时候的效率。但是我今天心情很糟糕,所以周末再说吧。
欢迎广大oracle从业者和爱好者加入我们的讨论群:120244471
下面是我在自己机器上做的一个实验:
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。
![](http://pic002.cnblogs.com/images/2012/352291/2012102520314782.png)
![](http://pic002.cnblogs.com/images/2012/352291/2012102520324439.png)
![](http://pic002.cnblogs.com/images/2012/352291/2012102520330711.png)
可以明显的看到,使用B树索引的table2的执行计划中并没有使用索引,而是和table1一样,采取了全表扫描。而table3的执行计划可以卡到,cost只有11611,也就是上面两个的一半不到吧,可见效果还是非常好的。随着数据量的逐渐增大,索引的效果才会体现出来。
据说位图索引会比较小:
![](http://pic002.cnblogs.com/images/2012/352291/2012102520384647.png)
事实还确实是这样子。
我觉得还有必要做一个实验,就是测试在一个类似于序列号的列上采用位图索引,B树索引和不带索引的查询,对比一下这个时候的效率。但是我今天心情很糟糕,所以周末再说吧。
欢迎广大oracle从业者和爱好者加入我们的讨论群:120244471
相关文章推荐
- 一周以来工作总结--关于位图索引
- 一周以来工作总结--关于位图索引
- 一周以来工作总结--关于表的压缩
- 一周以来工作总结--关于表的压缩
- 一周以来工作总结--关于高水位线
- 关于工作中声控功能开发(基于windows 7)的问题和总结
- 工作笔记(三)--关于文件、图片、视频的总结
- 关于项目结束时的工作总结
- 关于工作的一些总结
- 关于工作总结内容和周期的一点启示
- 关于开发小组管理工作的总结
- 在即将离开工作了四年的软件业前[zt,一位前辈关于代码优化的总结]
- 关于工作中linux命令的一些总结
- 关于滚轮式的DatePickerDialog在工作中的总结
- 关于GVP算法工作小总结
- 关于win10 64位系统下vs2013与python2.7环境下caffe的配置工作入门工作总结
- 一周以来的工作总结
- 关于Xcode编译性能优化的研究工作总结
- 2012年关于工作和学习的总结