oracle位图索引和普通索引区别_oracle从入门到精通第五版

oracle位图索引和普通索引区别_oracle从入门到精通第五版oracle – 索引算法bitmap生活案例我们思考一个问题:我们有一堆的球,有中、大、小 3 种型号,我们如何快速找到所有的大球?1、Range 分区在放球的时候,就已经考虑按照大小,分成 3 堆,大球 1 个分区,中球 1 个分区,小球 1 个分区。如果是考试,这个回答,看起来不

oracle – 索引算法bitmap   生活案例   我们思考一个问题:   我们有一堆的球,有中、大、小 3 种型号,我们如何快速找到所有的大球?   1、Range 分区   在放球的时候,就已经考虑按照大小,分成 3 堆,大球 1 个分区,中球 1 个分区,小球 1 个分区。   如果是考试,这个回答,看起来不得分,实际应用中,有一定参考价值。   (这样回答不好,是因为要考虑分区容量:如果每一堆只能放100个,我们有400个球,这时候就要考虑新的问题)   2、位图+平衡树   假设第一堆有 8 个球,2 个大球,2 个中球,4 个小球。大球记为 1,非大球记为 0,得出一串二进制数,1100 0000;中球记为 1,非中球记为 0,得出一串二进制数,0011 0000;小球记为 1,非小球记为 0,得出一串二进制数,0000 1111。   我们要找大球,只要看1100 0000这个数字,前面2个是1,所以前面2个球是大球;   我们要找大球或者中球, 1100 0000 与 0011 0000 “按位与” 运算,得出 1111 0000,就能看出,前面4个球满足条件。   很明显,如果我们有无数个球,这个二进制数就会特别长,这时候,我们对算法进一步优化,加入平衡树的算法:   min-m 放一堆,m-n 放一堆,n-max 放一堆,每一堆用一个二进制数表示, 如果 m-n 长度溢出了,就拆分成 m-x, x-n 两堆。   相关内容   bitmap 方式实现 12306 余票分配设计思路与基本算法:   https://zhuanlan.zhihu.com/p/   总结   通过这个案例,再看 Oracle 中的位图索引   1、如果字段只有几个固定的值,比如 “男“、”女”,就很适合创建位图索引;   2、如果一个球漏气,变成小球怎么办?我们要改动 1100 0000 这一串值, 改动数据期间,另一个人也想改数据,这显然会出问题。   所以,1 个人改的时候,8 个球都要锁定,   更新 1 行记录,一下子锁定了 8 行记录,可见 bitmap 更新的成本非常高, 因此,oracle 不推荐在频繁更新的场合,使用位图索引。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/76187.html

(0)
上一篇 2024年 8月 4日 下午2:43
下一篇 2024年 8月 4日 下午2:51

相关推荐

关注微信