亚博全站 位图索引-阿里云开发者社区

日期:2021-03-02 08:18:27 浏览量: 86

常规B树索引对包含每个行记录的ROWID和索引键值。位图索引不直接存储ROWID,每个不同的键值都有一个位图,这就是为什么位图索引的列应具有较少的不同值的原因。位图中的每个位都映射到可能的ROWID百人牛牛 ,并且位图中的每个位的特定值表示是否存在有价值的记录,因此位图存储特定的行和相关的ROWID。如果ROWID的值与条件匹配,则在rowid位置存储“ 1”,如果不匹配则存储“ 0”。甲骨文将施压

缩略图的存储。

创建位图索引

在table_name(columns)上创建位图索引index_name; Oracle将创建一系列位图,将使用该列中的每个特定值。例如,如果用于创建位图索引的列具有'East'和'Central'的两个值,则将为'East'和'Central'创建一个位图。如果它是一个复合位图索引,则该位图将被索引为

任何可能的排列值集。

使用位图索引

1.列的基数较低:不同的值较少

2.位图索引对于包含长where子句或聚合查询(包括求和,计数或其他聚合函数)的临时查询非常有用

3.表具有很多记录(例如,有1,000,000个记录具有10,000个不同的值)

4.非常频繁地对表执行临时查询

5.数据仓库环境(DSS系统)。位图索引不适用于联机事务处理(OLTP)。这是由位图索引的锁定机制引起的。仅锁定单个位图的位置是不可能的。可以锁定的最小位图数量是位图段位图索引 在线重建,其大小可以达到数据块的一半。更改一行记录将导致位图段被锁定,但是实际上仅更改了一行记录。当执行许多更新,插入或删除语句时位图索引 在线重建,影响将更加明显。当在数据仓库中批量加载或更新数据时,这种效果不是问题。

6.位图连接索引是在9中引入的,该连接可以避免在连接条件下需要提前创建位图索引的情况。

对位图索引的限制

1.不能用于RBO

2.不能用于分区表的全局索引

3.不支持在线创建或重建

4.对位图索引使用直接路径加载,无法应用“ SORTED_INDEX”标签

5.位图索引不能用于参照完整性

6.位图索引不能定义为UNIQUE

7.在9i之前,创建索引组织表时无法使用位图索引。仅从9i开始受支持。

8.无法将位图用于域索引

与B树索引相比的优势

1.减少了许多即席查询的响应时间

2.大大减少了存储空间

a)具有少量不同值的单列位图索引

如果位图索引是在唯一键上创建的,则它将比常规B树索引使用更多的空间。然后亚博yaboapp ,如果该列中有成百上千个重复值,则位图索引通常比传统的B树索引使用少25%的空间。位图以压缩格式存储。

b)在多个列上创建一个位图索引

与B树索引相比,位图索引可以节省大量存储空间。数据库中仅包含B树索引,必须对查询中使用的列进行预测亚博lol ,并且必须为这些列创建复合B树索引。多列复合B树索引不仅需要大量空间,而且还需要排序。对于在(marital_status亚博集团 ,region,gender)上创建的B树索引,当前列marital_status包含太多不同值时,仅访问REGION和DENDER是没有用的。为了使用索引,必须使用这些列的其他组合

样式创建索引。简而言之,三个低基数列有6种B树索引组合。必须考虑B树索引和创建该组合所需的存储空间。 B树索引可以解决此问题。位图索引可以在查询执行期间有效地合并,因此三个小的单列位图索引可以完成六个三列B树索引的工作。

3.在很大程度上影响并行DML和加载

位图索引适用于数据仓库程序,但不适用于高并发插入,更新和删除系统。在数据仓库环境中,通常会批量插入和更新数据。直到每个DML操作结束,索引维护操作才会执行。

4.包含空值的记录

如何使用位图索引

1.在所有可能的列上定义非null约束将减少存储空间,因为它不会为null值创建位图。

2.使用固定长度的数据类型将减少存储空间

3.增加create_bitmap_area_size参数可以提高查询处理速度。此参数确定为位图创建分配的内存量。此参数确定用于合并的位图以从范围扫描索引中进行检索的内存。

位图索引示例

MARITAL_ STATUS REGION GENDER INCOME_LEVEL

--------------- -------- ------- ------------

101个单一的东部公支架_1

102位已婚中央女性方括号_4

103位已婚西方女性方括号_2

104名离婚的西部男性方括号_4

105个中央母支架_2

106位已婚中央女性方括号_3

国家灰色婚姻状况凤凰彩票登录 ,地区,性别和收入水平都是低基数列(对于matil_status和region只有三个可能的值,对于性别来说有两个可能的值,对于收入水平列只有四个可能的值)。在这些列上创建位图索引是合适的。不适合在客户编号上创建位图索引,因为此列具有很高的基数。相反,唯一的B树索引将提供最佳的检索效率。

在此示例中,区域列的位图索引包含三个单独的位图

REGION ='东部'REGION ='中央'REGION ='西部'##客户#

1 0 0

0 1 0