1.1 创建位图索引
位图索引主要针对含有大量相同值的列而创建。位图索引被广泛引用到数据仓库中,创建方式和普通索引一致,对低基数(不同的值很少)的列创建位图索引,能够有效提高基于该列的查询效率。且执行查询语句的 where 子句中带有 AND 和 OR 谓词时,效率更加明显。
例 创建一个位图索引
CREATE BITMAP INDEX S1 ON PURCHASING.VENDOR (VENDORID);
位图索引具有以下约束:
- 支持普通表、堆表和水平分区表创建位图索引;
- 不支持对大字段创建位图索引;
- 不支持对计算表达式列创建位图索引;
- 不支持在 UNIQUE 列和 PRIMARY KEY 上创建位图索引;
- 不支持对存在 CLUSTER KEY 的表创建位图索引;
- 仅支持单列或者不超过 63 个组合列上创建位图索引;
- MPP 环境下不支持位图索引的创建;
- 不支持快速装载建含有位图索引的表;
- 不支持全局位图索引;
- 包含位图索引的表不支持并发的插入、删除和更新操作。
1.2 创建位图连接索引
位图连接索引是一种提高通过连接实现海量数据查询效率的有效方式,主要用于数据仓库环境中。区别于上一节所说的建立在单表上的位图索引,位图连接索引是针对两个或者多个表的连接而建立的位图索引,同时保存了连接的位图结果。对于索引列中的每一个值,位图连接索引在索引表中保存了对应行的 ROWID。
例 创建一个位图连接索引
create bitmap index SALES_CUSTOMER_NAME_IDX on SALES.SALESORDER_HEADER(SALES.CUSTOMER.PERSONID)
from SALES.CUSTOMER, SALES.SALESORDER_HEADER where SALES.CUSTOMER.CUSTOMERID = SALES.SALESORDER_HEADER.CUSTOMERID;
使用说明
- 适用于常规索引的基本限制也适用于位图连接索引;
- 用于连接的列必须是维度表中的主键或存在唯一约束;如果是复合主键,则必须使用复合主键中的所有列;
- 当多个事务同时使用位图连接索引时,同一时间只允许更新一个表;
- 连接索引创建时,基表只允许出现一次;
- 不允许对存在 cluster key 的表创建位图连接索引;
- 位图连接索引表(内部辅助表,命名为 BMJ$_索引名)仅支持 select 操作,其他操作都不支持:如 insert、delete、update、alter、drop 和建索引等;
- 不支持对位图连接索引所在事实表和维度表的备份还原,不支持位图连接索引表的表级备份还原;
- 不支持位图连接索引表、位图连接索引以及虚索引的导出导入;
- 位图连接索引及其相关表不支持快速装载;
- 位图连接索引名称的长度限制为:事实表名的长度 + 索引名称长度 +6<128;
- 仅支持普通表、堆表和 HUGE 表;
- WHERE 条件只能是列与列之间的等值连接,并且必须含有所有表;
- 事实表上聚集索引和位图连接索引不能同时存在;
- 不支持对含有位图连接索引的表中的数据执行 DML,如需要执行 DML,则先删除该索引;
- 含有位图连接索引的表不支持下列 DDL 操作:删除、修改表约束,删除、修改列,更改表名。另外,含位图连接索引的堆表不支持添加列操作;
- 不允许对含有位图连接索引的表并发操作;
- 创建位图连接索引时,在存储参数中可指定存储位图的字节数,有效值为:1~128,服务器自动校正为 4 的倍数,默认值为 48。如 STORAGE(SECTION(4)),表示使用 4 个字节存储位图信息。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




