总之,B 树索引更适合索引动态表的 OLTP 环境,而位图索引更适合在大型静态表上使用复杂查询的数据仓库环境。
bitmap索引特点:
3.Bitmap索引允许键值为空
B*Tree索引由于不记录空值,当基于is null的查询时,会使用全表扫描,
而对位图索引列进行is null查询时,则可以使用索引.
4.Bitmap索引对表记录的高效访问
当使用count(XX),可以直接访问索引就快速得出统计数据.
当根据位图索引的列进行and,or或 in(x,y,..)查询时,直接用索引的位图进行或运算,在访问数据之前可事先过滤数据.
5.Bitmap索引对批量DML操作只需进行一次索引
由于通过位图反映数据情况,批量操作时对索引的更新速度比B*Tree索引一行一行的处理快得多.
6.Bitmap索引的锁机制
对于B*Tree索引,insert操作不会锁定其它会话的DML操作.
而位图索引,由于用位图反映数据,不同会话更新相同键值的同一位图段,insert、update、delete相互操作都会发锁定。
创建语法很简单,就是在普通索引创建的语法中index前加关键字bitmap即可,例如:
create bitmap index <index_name> on <table_name(column_name)>;
看到这个现象,我的第一感觉是,他们是不是使用了位图索引,因为位图索引锁住的不止是一行而是一组数据,所以出现死锁的可能性大大增加。我打开了一份ORA-60 Trace文件,查看了SQL语句和锁的情况,更加确定了我的怀疑,估计是位图索引导致的问题。于是我问了负责开发的小王,是不是他们在这张表上使用了位图索引。小王想了想,说确实是。我说位图索引一般用在OLAP系统上,在变化频率特别高的环境下不能使用位图索引,必须使用普通索引,否则在高并发量的情况下,会出现较多的死锁,前台会报ORA-60错误。
bitmap的适用场合:
1.位图索引是Oracle数据库在7.3版本中加入的,8i,9i企业版和个人版支持,标准版不支持.
2.基于规则的优化器无法使用Bitmap索引
3.适应于有大量重复值的列查询
4.对于8i,9i版本,不适用于单行插入,适用于批量插入的数据,
因为单行插入时,相同键值,每插入8行就会生成一行索引块中的位图段,即使相同的值.
而批量插入时,相同键值只生成一个位图段.
5.由于并发DML操作锁定的是整个位图段的大量数据行,所以位图索引主要是用于OLAP应用,也可以用于OLTP中主要为读操作的表.
下面分3种方式来讨论数据的插入:
a.一次插入一行,插入多行后,一次提交;
b.每插入一行,提交一次;
c.批量插入方式,一次提交;
对于第一种方式,观察位图索引的变化情况.
a.假设插入8行相同键值的数据,如果以每行方式插入,然后一次提交,则会生成8个位图
b.数据每行提交方式,与上面的情况相似,但有一点不一样,每提交一行,拷贝原来的位图,生成新的位图,并标记原来的位图为已删除
c.第三种方式,批量插入数据,相同键值,只生成一次位图,只有一个位图
所以,位图索引最好采用批量插入方式,这样,每个键值只生成一个位图.而单行数据插入方式,每个键值将每8行数据生成一个位图.
10G的情况,则简单得多.
上面3种方式,相同键值的插入,位图的生成是一样的,只有一个位图,并且,每次提交时,并不会删除以前的位图,而是直接修改对应键值的位图.
分享到:
相关推荐
2. **位图索引**:适合在低选择性列(即大量行具有相同值的列)上使用,它将每个索引值映射为位图,减少了存储空间,但不适合频繁的DML操作。 3. **哈希索引**:通过哈希算法直接定位数据,适用于等值查询,但不...
3. **索引**:索引可以显著提高查询性能,有B树索引、位图索引和函数索引等多种类型。创建索引需根据数据查询模式来选择最合适的类型。 4. **视图**:视图是虚拟表,基于一个或多个表的SELECT查询结果。视图可简化...
3. **索引与查询优化**:讨论了各种类型的索引(B树、位图、函数索引等)的创建与使用,以及如何通过 Explain Plan 和 SQL Trace 分析查询性能,优化查询语句。 4. **表空间与数据存储管理**:介绍了表空间的创建和...
位图索引则适合于存储重复值多的字段,通过位图偏移来与行ID对应,但在OLTP环境中使用较少,因为频繁的DML操作可能导致锁等待和死锁。而在OLAP环境中,位图索引能有效地节省空间并优化查询性能。 按功能分类,索引...
- 索引类型:理解B树索引、位图索引、函数索引的优缺点,以及何时使用它们来提高查询性能。 4. 事务与并发控制: - 事务的概念:了解事务的ACID属性(原子性、一致性、隔离性、持久性)。 - 锁机制:分析行级锁...
- **索引**:索引是加快查询速度的关键工具,分为B树索引、位图索引、函数索引等。B树索引适合全值匹配,位图索引适用于低基数列,函数索引则支持基于函数的查询。 3. **数据完整性**: - **实体完整性**:确保每...
Oracle提供了多种类型的索引,包括B*Tree索引、反向索引、降序索引、位图索引、函数索引以及interMedia全文索引等。选择合适的索引类型对于提升查询效率至关重要。 **基本的索引概念** 了解索引的基本概念是优化的...
Oracle提供了多种类型的索引,包括B树索引、位图索引、函数索引等。B树索引是最常见的,适用于大部分查询场景,能快速定位单个或多个列。位图索引适合于多值字段,例如用于性别或状态这样的分类数据。函数索引允许对...
- "索引机制"课程可能讲解了如何创建、管理和使用索引,以及B树索引、位图索引、唯一索引和非唯一索引的区别。 - 索引可以极大地提高查询速度,但也会影响数据插入和更新的速度,因此需要根据实际需求合理设计。 ...
- **选择合适的索引类型**:B树索引、位图索引、函数索引、复合索引等,每种都有其适用场景。 - **索引维护与重建**:何时进行索引重建,以及重建过程中的注意事项。 4. **SQL优化技巧** - **使用EXPLAIN PLAN...
Oracle提供了多种类型的索引,如B树索引、位图索引等。DBA_INDEXES视图可以显示所有索引的信息,而USER_INDEXES视图则专门用于查看特定模式的索引。通过USER_INDEXES和USER_INDEX_COLUMNS视图,我们可以获取索引的...
- `CREATE INDEX`:创建索引以提高查询速度,包括B树索引、位图索引等。 - `ALTER INDEX`:重建或重命名索引。 - `DROP INDEX`:删除不再需要的索引。 3. **表和视图管理**: - `CREATE TABLE`:创建新的表结构...
从逻辑上分:单行索引、多行索引、函数索引、域索引、唯一索引、非唯一索引从物理上分〔DBA 关注〕:分区索引、非分区索引、B-TREE、正常型 B 树、反转型 B 树、位图索引。 知识点:索引类型、逻辑索引、物理索引、...
- 正确使用索引:讨论何时应创建索引,以及如何设计B树索引、位图索引和函数索引以优化查询速度。 - 规范化与反规范化:探讨在满足业务需求的同时,如何平衡规范化和反规范化的利弊,以优化数据冗余和查询复杂性。...
5. 存储结构:理解Oracle的数据块、区、段、表空间等存储层次,以及索引、簇、位图等存储优化策略。 6. 安全性:Oracle提供了用户权限管理和角色的概念,学习如何创建和管理用户,设置权限,以及数据库审计和加密。...
6. 索引:提高查询速度,有B树索引、位图索引、函数索引等多种类型。 7. 死锁:两个或更多事务互相等待对方释放资源,DBA需使用死锁检测和解除策略。 四、Oracle培训内容 1. SQL基础:SQL语法,查询优化,子查询,...
如何合理创建和管理索引,如B树索引、位图索引和函数索引,是提升数据库性能的关键。 4. **事务管理**:事务是数据库操作的基本单元,确保数据的一致性和完整性。了解ACID(原子性、一致性、隔离性、持久性)原则和...
3. **存储管理**:学习Oracle的物理存储结构,包括表、索引、簇和位图索引的组织方式,以及如何进行空间管理和性能调整。 4. **事务处理和并发控制**:理解Oracle的事务概念,以及多版本并发控制(MVCC)机制,包括...
2. 索引设计:学习如何为不同类型的查询创建合适的索引,包括B树索引、位图索引和函数索引。 3. 分区策略:源码可能涉及分区表的创建和管理,以提高大数据量表的查询速度和维护效率。 4. 表空间管理:如何有效地分配...