首页 > 编程知识 正文

位图索引与b树(位图索引介绍)

时间:2023-05-05 03:36:47 阅读:123495 作者:880

位图索引是使用计算器的最小单位位存储列值,并使用该值自动生成rowid的索引结构。 将列值直接转换为位存储不仅大大节省了存储容量,而且各种位运算还解决了现有索引无法解决的许多问题。

其他索引有很多无法比拟的优点,但同时也有很多难以克服的缺点,很难应用于所有领域。 位图索引主要用于“数据仓库”。 尽管创建和管理位图索引成本高昂,但用于查询数据可以获得非常好的结果。 如果能根据情况准确合理地使用,特别是在处理大量数据方面,将会获益。

如果能够基于背景、结构、特征以及使用它们读取数据的各种方法来详细说明,则详细的执行计划对于各种读取类型尤为重要。

位图索引的根块和分支块的结构与B-TREE索引完全相同,但只有叶块与B-TREE索引不同。 如果假设表的" color "列的值存储在每个数据块中的顺序为" YELLOW、GREEN、RED、NULL ",并且要基于该列创建位图索引,请将叶块中该列的每个值更改为位位图的转换是利用二维表实现的,其中表的行表示与各列的值对应的位,表的列表示与各行对应的列的值。

此外,在执行数据查询时,满足所有查询条件的最终数据可以直接转换为ROWID,因此不像B-TREE索引那样,每个索引行都有ROWID。 位图索引具有其他索引无法比拟的优点,但不是万能的。 要创建位图索引,必须基于离散度较低且重复相同值的列创建位图索引。 例如,为包含1000万行数据的表创建位图索引可以确保占用不超过10MB的空间。

如果基于离散度较低的列创建索引,则B-TREE索引必须通过合并多个列来创建组合索引,以提高索引效率,而位图索引则不然。 之所以不用到此为止,是因为支持集合运算。 也就是说,从单个位图索引中读取最终结果,然后进行集合运算,可以获得与合并索引完全相同的效果。

在位或运算中,1无论是与0运算还是与1运算,结果都是1,只有在两者都是0的情况下,结果才是0; 在and运算中,无论0是用and1还是0进行运算,结果都是0,只有两者都是1时,结果才是1。 位运算结果实际上也是查询条件的综合,因此如果找到位运算结果,就意味着找到了满足条件的数据行。 位图索引支持位运算,因此原始复杂的“或”运算非常容易。 由于位图索引的占用空间太小,当然扫描速度也会提高很多。

使用位图索引从表中读取数据时,首先分别读取满足各个查询条件的所有位,然后对其执行AND运算,最后筛选出满足条件的数据。 010010是运算后的最后一位,将其转换为rowid,最后使用该rowid从表中读取对应的数据行。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。