位图索引是一种特殊类型的数据库索引,它使用位图。此技术用于大型数据库,当列的基数较低且这些列在查询中最常使用时。
位图索引的需要 –
通过下面给出的示例,位图索引的需求将变得清晰:
例如,假设一家公司拥有一个员工表,其中包含 EmpNo、EmpName、Job、New_Emp 和工资等条目。让我们假设员工一年被雇用一次,因此该表将很少更新并且大部分时间将保持不变。但是这些列将经常用于查询以检索数据,例如:公司女员工人数等。在这种情况下,我们需要一种文件组织方法,该方法应该足够快以提供快速结果。但是任何传统的文件组织方法都没有那么快,因此我们切换到一种更好的存储和检索数据的方法,称为位图索引。
位图索引是如何完成的 –
在上面的员工表示例中,我们可以看到列 New_Emp 只有两个值Yes和No基于员工是否是公司的新员工。同样让我们假设员工的工作仅分为 4 类,即经理、分析师、文员和销售员。此类列称为基数较低的列。尽管这些列的唯一值较少,但可以经常查询它们。
位:位是计算中使用的基本信息单位,它只能具有 0 或 1 两个值中的一个。二进制数字的两个值也可以解释为逻辑值真/假或是/否。
在位图索引中,这些位用于表示那些低基数列中的唯一值。这种以位形式存储低基数行的技术称为位图索引。
继续 Employee 示例,下面给出的是 Employee 表:
如果 New_Emp 是要索引的数据,则位图索引的内容在标题位图索引下显示为四列(因为我们在上表中有四行)。这里位图索引“是”的值为 1001,因为第 1 行和第 4 行在 New_Emp 列中的值为“是”。
在这种情况下,有两个这样的位图,一个用于“New_Emp”Yes,另一个用于“New_Emp”NO。很容易看出,位图索引中的每一位都表明特定行是否指的是公司的新人。
以上场景是位图索引的最简单形式。大多数列将具有更多不同的值。例如,此处的 Job 列将只有 4 个唯一值(如前所述)。位图索引的变化也可以有效地索引这些数据。对于 Job 列,位图索引如下所示:
现在假设,如果我们想找出公司中不是新员工并且是销售人员的员工的详细信息,那么我们将运行查询:
SELECT *
FROM STUDENT
WHERE New_Emp = "No" and Job = "Salesperson";
对于此查询,DBMS 将搜索两列的位图索引并对这些位执行逻辑 AND 运算并找出实际结果:
这里的结果 0100 表示必须检索第二列作为结果。
SQL 中的位图索引 – 在 sql 中创建位图索引的语法如下:
CREATE BITMAP INDEX Index_Name
ON Table_Name (Column_Name);
对于上面的员工表示例,将按如下方式创建 New_Emp 列上的位图索引:
CREATE BITMAP INDEX index_New_Emp
ON Employee (New_Emp);
好处 –
- 在插入删除和更新方面的效率
- 更快地检索记录
缺点——
- 只适合大桌子
- 位图索引很耗时