📅  最后修改于: 2020-12-12 08:07:14             🧑  作者: Mango
它是建立在单个键上的特殊索引类型。但是,它旨在快速触发多个键上的查询。在对其应用位图索引之前,我们需要按顺序排列记录。这使得从块中获取特定记录变得简单。而且,在文件块中分配它们变得很容易。
单词“位图”由“位”和“图”组成。比特是计算机系统中最小的数据单位。地图意味着组织事物。因此,位图仅是数组形式的位映射。在一个关系中,每个属性为其值携带一个位图。位图具有足够的位,可以为块中的每个记录编号。
例如,考虑一个Student_record关系,我们希望找出英语成绩大于40的男女学生。下图给出了性别的位图。
如果将记录的值设置为Mr,则意味着位图的第i位将被设置为1。位图中剩余的Mr的所有其他位将被设置为0。类似地,在这种情况下,将继续执行相同的步骤。女学生。如果对于特定的j条记录,该值设置为Ms,则意味着位图中的第j位将设置为1。Ms的所有其他位将设置为0。现在,如果用户希望检索一个女学生或男学生的单项或全部记录,即,作为先生或女士的价值,只需阅读该关系的所有记录。阅读后,为先生或女士选择所需的记录。
但是,位图索引不允许快速选择记录。但是,它使用户可以阅读和仅选择所需的记录。从上面的示例可以看出,用户只选择了女学生或男学生所需的记录。
包括上面示例中的一个,Bitmap索引有以下用途:
最好有效地实现位图操作。
通过使用for循环,可以实现两个位图的交集。循环的第i次迭代对两个位图的第i个位执行“与”运算。为了加快相交操作,请使用按位与指令。这是因为一个字由32位或64位组成,具体取决于计算机体系结构。因此,单个按位AND一次执行32或64位的交集很容易。
位图联合用于计算两个位图的OR。为了执行联合操作,我们一次对32位或64位使用按位或指令。
补码运算用于执行取反运算。它是通过补充位图的每个位来完成的。但是,如果某些记录已被删除,则位图的补码不足。发生这种情况的原因是,在原始位图中,与这些不存在的记录对应的位将为0。但是在补码中将变为1。为此,执行补码位图与存在位图的交集,以确保与已删除记录相对应的位必须关闭为0。对于空值,也会发生相同的问题。因此,执行补码位图与零值的位图补码的相交运算。
注意:我们可以将带有B +树的位图用作压缩存储机制,以处理B +树的叶节点上经常出现的值。