学习oracle的索引
1,索引的概念和分类
1,create index可以建立索引在如下几种情况
1,表,分区表,索引组织表,或集表的一个或多个列
2,表或集表的一或多个标量类型的对象属性上
1,经测在record类型不能用表类型
2,plsql表类型同上
3,nested 表的nested表列上
1,问题,其语法及注意点
4,官方文档 http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_5012.htm#i2062403
2,索引的类型
1,普通索引,默认即oracle创建的B树索引
2,位图索引,以位图方式存储与键值关连的rowid
3,分区索引,分区表中的分区表的索引列的每个值存储一条记录或叫条目
4,基于函数的索引,基于函数表达式.
5,域索引,与某个特定应用有关的索引类型的一个实例
6,?Oracle Database Concepts for a discussion of indexes 可以查看关于索引的讨论
问题
3,构建索引的前提条件
1,索引在自己的用户下
2,对索引的表具有构建索引的对象权限
3,必须有create any index系统权限
4,为了创建域索引,还要具备在indextype上实行execute对象权限
且先要创建indextype
5,为了创建基于函数的索引,这些函数必须声明为deterministic
如果这些函数属于另一个用户,必须对其有execute的对象权限
1,测试创建基于函数的索引
4,唯一索引unique
1,限制情况:
1,不能对位图索引创建unique index
2,不能对域索引创建unique index
5,bitmap位图索引
1,不是存储每行的索引,而存储每个不同键建立位图索引
2,构建每个不同键值与rowid的关系
3,位图中每个比特对应一个可能的rowid,如果配置了比特, 即对应rowid的记录包含一个键值
4,这种表示适用于低强度的并发的应用,比如数据仓库
5,在此索引上,会存储索引列全为null在索引中,经测试null仅存储一次
6,限制情况
1,不能在全局分区索引上创建位图索引
2,不能在一个索引组织表上创建位图索引,除非索引组织表建立一个与它映射的表
3,位图索引不能同时指定unique和bitmap
4, 域索引也不能指定bitmap
5,位图索引最多有30列
6,问题:?Oracle Database Concepts and
Oracle Database Performance Tuning Guide for more information about using bitmap indexes
6,临时表上可以建立索引,但作用时间范围同于临时表,基于会话和基于事务;
不能在临时表上创建域索引
不能指定物理属性和并行度及日志和表空间
问题:要测试下临时表上创建索引的情况
CREATE TABLE and Oracle Database Concepts for more information on temporary tables
7,索引列的限制情况
1,不能对用户自定义类型,long,long raw,lob,ref建立索引
除非oracle支持在ref类型的列上建索引或者用scope子句定义的属性
2,只有B树即普通索引可以在加密列上建索引,且只能用于等值查询
8,基于函数的索引的一些注意点
1,如果索引列为空,不会用基于函数的索引
create table t_unique(a int);--对其插入多条null记录
create index t_unique_idx on t_unique(a,o);
--强制全表扫描成本是3
select /*+full(t_unique) */ * from t_unique where a is null
select * from t_unique where a is null
小结:有时强制直全表性能更差,全表的一致读为8,而索引范围扫描的一致性读为2
2,where条件列顺序与基于函数的列顺序不同,也会使用基于函数的索引
3,如果基于函数的索引,其函数无效可删除了。其索引会标记为disabled;
如果基于disabled的查询就会失败(前提是cbo选择使用索引)
如果基于disabled的dml也会失败,除非你把索引标记为unuable,把参数skip_unusable_indexes=true
2,索引测试,主要是不同索引的适用情况
3,索引与dml的关系
3,学习存储过程中多个begin end代码块与异常精确定位
4,测试如果在没有备份表的情况下,truncate table,可否用logminer恢复数据
C:\Users\123>
sqlldr userid=scott/system control=c:\insert_batch.ctl log=c:\sqlloader_imp.log
1,索引的概念和分类
1,create index可以建立索引在如下几种情况
1,表,分区表,索引组织表,或集表的一个或多个列
2,表或集表的一或多个标量类型的对象属性上
1,经测在record类型不能用表类型
2,plsql表类型同上
3,nested 表的nested表列上
1,问题,其语法及注意点
4,官方文档 http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_5012.htm#i2062403
2,索引的类型
1,普通索引,默认即oracle创建的B树索引
2,位图索引,以位图方式存储与键值关连的rowid
3,分区索引,分区表中的分区表的索引列的每个值存储一条记录或叫条目
4,基于函数的索引,基于函数表达式.
5,域索引,与某个特定应用有关的索引类型的一个实例
6,?Oracle Database Concepts for a discussion of indexes 可以查看关于索引的讨论
问题
3,构建索引的前提条件
1,索引在自己的用户下
2,对索引的表具有构建索引的对象权限
3,必须有create any index系统权限
4,为了创建域索引,还要具备在indextype上实行execute对象权限
且先要创建indextype
5,为了创建基于函数的索引,这些函数必须声明为deterministic
如果这些函数属于另一个用户,必须对其有execute的对象权限
1,测试创建基于函数的索引
4,唯一索引unique
1,限制情况:
1,不能对位图索引创建unique index
2,不能对域索引创建unique index
5,bitmap位图索引
1,不是存储每行的索引,而存储每个不同键建立位图索引
2,构建每个不同键值与rowid的关系
3,位图中每个比特对应一个可能的rowid,如果配置了比特, 即对应rowid的记录包含一个键值
4,这种表示适用于低强度的并发的应用,比如数据仓库
5,在此索引上,会存储索引列全为null在索引中,经测试null仅存储一次
6,限制情况
1,不能在全局分区索引上创建位图索引
2,不能在一个索引组织表上创建位图索引,除非索引组织表建立一个与它映射的表
3,位图索引不能同时指定unique和bitmap
4, 域索引也不能指定bitmap
5,位图索引最多有30列
6,问题:?Oracle Database Concepts and
Oracle Database Performance Tuning Guide for more information about using bitmap indexes
6,临时表上可以建立索引,但作用时间范围同于临时表,基于会话和基于事务;
不能在临时表上创建域索引
不能指定物理属性和并行度及日志和表空间
问题:要测试下临时表上创建索引的情况
CREATE TABLE and Oracle Database Concepts for more information on temporary tables
7,索引列的限制情况
1,不能对用户自定义类型,long,long raw,lob,ref建立索引
除非oracle支持在ref类型的列上建索引或者用scope子句定义的属性
2,只有B树即普通索引可以在加密列上建索引,且只能用于等值查询
8,基于函数的索引的一些注意点
1,如果索引列为空,不会用基于函数的索引
create table t_unique(a int);--对其插入多条null记录
create index t_unique_idx on t_unique(a,o);
--强制全表扫描成本是3
select /*+full(t_unique) */ * from t_unique where a is null
select * from t_unique where a is null
小结:有时强制直全表性能更差,全表的一致读为8,而索引范围扫描的一致性读为2
2,where条件列顺序与基于函数的列顺序不同,也会使用基于函数的索引
3,如果基于函数的索引,其函数无效可删除了。其索引会标记为disabled;
如果基于disabled的查询就会失败(前提是cbo选择使用索引)
如果基于disabled的dml也会失败,除非你把索引标记为unuable,把参数skip_unusable_indexes=true
2,索引测试,主要是不同索引的适用情况
3,索引与dml的关系
3,学习存储过程中多个begin end代码块与异常精确定位
4,测试如果在没有备份表的情况下,truncate table,可否用logminer恢复数据
C:\Users\123>
sqlldr userid=scott/system control=c:\insert_batch.ctl log=c:\sqlloader_imp.log
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-755436/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9240380/viewspace-755436/