- 浏览: 254662 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (232)
- 瞎扯两句 (8)
- 操作系统 (5)
- 工作笔记 (33)
- 设计模式 (1)
- java (57)
- Java IDE (7)
- hibernate (17)
- oracle (46)
- ms sql (2)
- spring (9)
- struts2 (0)
- javascript (16)
- java_code (2)
- java之集合 (2)
- java之线程 (4)
- java之IO (4)
- java之虚拟机 (6)
- java之异常 (0)
- EJB (4)
- XML (4)
- 数据结构-算法 (2)
- 架构设计 (5)
- 配置信息 (2)
- 阅读笔记 (6)
- IT专业英语 (1)
- PI (0)
- 单元测试 (1)
最新评论
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种方式,相同键值的插入,位图的生成是一样的,只有一个位图,并且,每次提交时,并不会删除以前的位图,而是直接修改对应键值的位图.
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种方式,相同键值的插入,位图的生成是一样的,只有一个位图,并且,每次提交时,并不会删除以前的位图,而是直接修改对应键值的位图.
发表评论
-
oracle sql优化
2013-09-23 14:29 6591.绑定变量 不适用在OLAP系统中。 因为在OLAP中, ... -
阅读笔记 SQL
2013-08-14 18:24 830Start with...Connect By子句递归查询一般 ... -
oracle 锁 分析
2013-06-18 10:57 4791. 分为 tx 和 tm 。 即 行级 和 表级 其中 ... -
Oracle的TX锁(行级锁、事务锁)
2013-06-18 10:04 940问题:如何使用事务? ... -
mysql 时间戳自动更新
2013-04-09 10:24 984-- Table "pnodetail" ... -
阅读笔记
2013-02-07 17:24 431. 在OLTP系统装要注意sql的硬解析,但是在OLA ... -
synonym
2013-02-07 16:58 956建立一个同义词可以排除一个对象名字的限制. 如果你的数据库有多 ... -
oracle schema
2013-02-07 16:50 765A schema is a collection of dat ... -
物化视图的使用分析
2013-02-05 17:27 7871. 在 深入浅出 系列中,作者列举了一个例子来说明。 ... -
Oracle编程艺术阅读笔记-2
2013-01-29 10:40 7771. 位图索引。 不 ... -
Oracle:位图索引与死锁-2
2013-01-28 18:24 837位图索引被存储为压缩的索引值,其中包含了一个范围内的ROWID ... -
Oracle编程艺术阅读笔记-1
2013-01-24 18:48 8731. 绑定变量。 不使用会产生的影响: 每次运 ... -
JAVA完全控制Oracle中BLOB、CLOB说明
2012-12-28 17:07 852网络上很多关于JAVA对Oracle中BLOB、CLOB类型字 ... -
H2数据库的使用
2012-12-13 18:40 7731.下载h2的jar,例如h2-1.3.170.jar 2.c ... -
JTA
2012-12-05 17:35 976要理解 JTA 的实现原理 ... -
oracle 体系结构
2012-12-03 23:13 721[img][/img] oracle工作原理 ... -
oracle 存储过程实例-4
2012-12-03 23:04 542--错误处理部分。 --自 ... -
oracle 存储过程实例-4
2012-12-03 23:02 846--错误处理部分。 --自定义异常处理 CREATE OR ... -
oracle 存储过程实例-3
2012-12-03 21:42 816PROCEDURE autoissuereturns ( ... -
oracle函数 code实例
2012-12-03 21:08 867CREATE OR REPLACE FUNCTION gett ...
相关推荐
位图索引 7-30 索引选项 7-32 创建索引 7-34 什么是视图 7-35 创建视图 7-36 序列 7-37 创建序列 7-38 使用序列 7-40 临时表 7-41 临时表:注意事项 7-43 数据字典:概览 7-44 数据字典视图 7-45 数据...
- 索引类型:理解B树索引、位图索引、函数索引的优缺点,以及何时使用它们来提高查询性能。 4. 事务与并发控制: - 事务的概念:了解事务的ACID属性(原子性、一致性、隔离性、持久性)。 - 锁机制:分析行级锁...
- **索引类型**:列举并解释了Oracle数据库中常用的索引类型,如B树索引、位图索引等。 - **索引优化**:分享了提高索引使用效率的方法,包括选择合适的索引类型、维护索引结构等。 - **覆盖索引**:介绍了覆盖索引...
- `CREATE INDEX`:创建索引以提高查询速度,包括B树索引、位图索引等。 - `ALTER INDEX`:重建或重命名索引。 - `DROP INDEX`:删除不再需要的索引。 3. **表和视图管理**: - `CREATE TABLE`:创建新的表结构...
2. **位图索引**:适合在低选择性列(即大量行具有相同值的列)上使用,它将每个索引值映射为位图,减少了存储空间,但不适合频繁的DML操作。 3. **哈希索引**:通过哈希算法直接定位数据,适用于等值查询,但不...
1. **Oracle体系结构**: - **实例和数据库**:Oracle数据库实例是内存结构和后台进程的集合,它们处理对数据库的请求。而数据库则是物理存储的数据文件和控制文件。 - **进程架构**:主要包括用户进程、服务器...
- 索引优化:选择合适的索引类型,如B树、位图和函数索引,以及索引的维护。 9. **并发控制**: - 锁机制:理解行级锁、表级锁和模式锁,处理并发问题。 - 事务与并发:掌握事务的ACID特性,了解死锁和活锁的...
- 索引:加速数据检索,包括B树索引、位图索引和函数索引等。 - 优化器:Oracle的查询优化器自动选择执行查询的最佳路径。 - 分区统计信息:帮助优化器做出更准确的选择。 5. **安全性** - 用户管理和权限:...
- 索引类型:B树、位图、唯一性和非唯一性索引的区别。 - 索引的创建与维护:何时创建索引,如何选择合适的索引类型。 - 索引的影响:对查询性能和写操作的影响。 5. **性能优化**: - Explain Plan:如何解读...
4. **表与索引**:如何创建、修改和删除表,以及索引的作用、类型(B树索引、位图索引、函数索引等)和管理。 5. **安全性**:用户权限管理,包括角色、权限的授予与撤销,以及数据库审计功能。 6. **备份与恢复**...
- **索引与分区**:书中详细讨论了索引的类型(如B树索引、位图索引等)以及如何合理使用分区来提高查询性能。 **6. 存储过程与函数** - **存储过程**:通过创建存储过程并调用存储过程的步骤,使读者能够编写可...
- "索引机制"课程可能讲解了如何创建、管理和使用索引,以及B树索引、位图索引、唯一索引和非唯一索引的区别。 - 索引可以极大地提高查询速度,但也会影响数据插入和更新的速度,因此需要根据实际需求合理设计。 ...
- **选择合适的索引类型**:B树索引、位图索引、函数索引、复合索引等,每种都有其适用场景。 - **索引维护与重建**:何时进行索引重建,以及重建过程中的注意事项。 4. **SQL优化技巧** - **使用EXPLAIN PLAN...
3. **索引**:索引可以显著提高查询性能,有B树索引、位图索引和函数索引等多种类型。创建索引需根据数据查询模式来选择最合适的类型。 4. **视图**:视图是虚拟表,基于一个或多个表的SELECT查询结果。视图可简化...
- 索引的作用是加快查询速度,有B树索引、位图索引、唯一索引和非唯一索引等类型。 - 了解索引的维护和优化,包括分析索引(ANALYZE INDEX)和重建索引(REBUILD INDEX)。 4. **PL/SQL编程**: - PL/SQL是...
- 索引:提高查询性能的数据结构,如B树、位图索引。 - 主键:表中唯一标识每条记录的字段,不允许为空且唯一。 - 外键:引用其他表主键的字段,用于建立表间关系。 2. **SQL语言** - SELECT语句:用于从数据库...
- 正确使用索引:讨论何时应创建索引,以及如何设计B树索引、位图索引和函数索引以优化查询速度。 - 规范化与反规范化:探讨在满足业务需求的同时,如何平衡规范化和反规范化的利弊,以优化数据冗余和查询复杂性。...
- 索引类型:理解B树索引、位图索引、函数索引、复合索引等的区别和应用场景。 - 索引的创建与维护:知道如何创建、修改和删除索引,以及索引对查询性能的影响。 - 索引优化:学习如何通过分析和调整索引来提高...
- **索引**:理解B树索引、位图索引和函数索引的使用场景,以及如何通过EXPLAIN PLAN分析SQL执行计划。 3. **数据库管理**: - **备份与恢复**:Oracle提供多种备份策略,如物理备份、逻辑备份和RMAN备份。理解...