📜  位图索引

📅  最后修改于: 2020-12-12 08:07:14             🧑  作者: Mango

位图索引

它是建立在单个键上的特殊索引类型。但是,它旨在快速触发多个键上的查询。在对其应用位图索引之前,我们需要按顺序排列记录。这使得从块中获取特定记录变得简单。而且,在文件块中分配它们变得很容易。

位图索引结构

单词“位图”由“位”和“图”组成。比特是计算机系统中最小的数据单位。地图意味着组织事物。因此,位图仅是数组形式的位映射。在一个关系中,每个属性为其值携带一个位图。位图具有足够的位,可以为块中的每个记录编号。

例如,考虑一个Student_record关系,我们希望找出英语成绩大于40的男女学生。下图给出了性别的位图。

如果将记录的值设置为Mr,则意味着位图的第i位将被设置为1。位图中剩余的Mr的所有其他位将被设置为0。类似地,在这种情况下,将继续执行相同的步骤。女学生。如果对于特定的j条记录,该值设置为Ms,则意味着位图中的第j位将设置为1。Ms的所有其他位将设置为0。现在,如果用户希望检索一个女学生或男学生的单项或全部记录,即,作为先生或女士的价值,只需阅读该关系的所有记录。阅读后,为先生或女士选择所需的记录。

但是,位图索引不允许快速选择记录。但是,它使用户可以阅读和仅选择所需的记录。从上面的示例可以看出,用户只选择了女学生或男学生所需的记录。

位图索引的使用

包括上面示例中的一个,Bitmap索引有以下用途:

  • 它使用户可以从关系中读取和仅选择所需的记录或数据。
  • 这对于在多个键上进行选择很有用。
  • 位图索引有助于统计属于选择要求的记录数。这意味着可以很容易地计算出在用户选择标准下的那些元组。
  • 位图索引在执行查询以进行数据分析时既有用又必要。
  • 单个位图的大小小于1%。因此,其大小小于关系。例如,关系中的记录为100字节,并且该关系占用1%的内存空间。因此,一个位图占据1/8的关系占用的空间。

记录的删除和插入

  • 从关系中删除记录会干扰记录的顺序。删除的记录会在其他记录之间造成空间或间隙。
  • 可以通过移动其他记录来填补这些空白,但这是一项昂贵的任务。
  • 存在位图是解决此问题的方法。通过存储存在位图,我们可以识别已删除的记录。
  • 在存在位图中,如果一条记录不存在,则其位值为0否则为1。
  • 插入记录具有成本效益。这是因为插入一条记录不会影响其他记录的顺序。
  • 通过仅替换已删除的记录或将记录追加到EOF(文件末尾),用户就可以继续插入记录。

位图操作的实现

最好有效地实现位图操作。

  • 交叉口作业

通过使用for循环,可以实现两个位图的交集。循环的第i迭代对两个位图的第i个位执行“与”运算。为了加快相交操作,请使用按位与指令。这是因为一个字由32位或64位组成,具体取决于计算机体系结构。因此,单个按位AND一次执行32或64位的交集很容易。

  • 联盟运作

位图联合用于计算两个位图的OR。为了执行联合操作,我们一次对32位或64位使用按位或指令。

  • 取反运算

补码运算用于执行取反运算。它是通过补充位图的每个位来完成的。但是,如果某些记录已被删除,则位图的补码不足。发生这种情况的原因是,在原始位图中,与这些不存在的记录对应的位将为0。但是在补码中将变为1。为此,执行补码位图与存在位图的交集,以确保与已删除记录相对应的位必须关闭为0。对于空值,也会发生相同的问题。因此,执行补码位图与零值的位图补码的相交运算。

注意:我们可以将带有B +树的位图用作压缩存储机制,以处理B +树的叶节点上经常出现的值。