Oracle对象之索引

索引的图示结构,索引的默认存储结构是B树结构,
其次还有位图等

 

1.说明
 
  1)索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息。
 
  2)索引是建立在表上的可选对象;索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率
 
  3)索引在逻辑上和物理上都与相关的表和数据无关,当创建或者删除一个索引时,不会影响基本的表;
 
  4)索引一旦建立,在表上进行DML操作时(例如在执行插入、修改或者删除相关操作时),oracle会自动管理索引,索引删除,不会对表产生影响
 
  5)索引对用户是透明的,无论表上是否有索引,sql语句的用法不变
 
  6)oracle创建主键时会自动在该列上创建索引
 
 

1.1 索引的创建语法: 

 1 CREATE UNIUQE | BITMAP INDEX <schema>.<index_name>
 2 
 3       ON <schema>.<table_name>
 4 
 5            (<column_name> | <expression> ASC | DESC,
 6             <column_name> | <expression> ASC | DESC,...)
 7      TABLESPACE <tablespace_name>
 8      STORAGE <storage_settings>
 9      LOGGING | NOLOGGING
10     COMPUTE STATISTICS
11      NOCOMPRESS | COMPRESS<nn>
12      NOSORT | REVERSE
13      PARTITION | GLOBAL PARTITION<partition_setting>

 

相关说明

1) UNIQUE | BITMAP:指定UNIQUE为唯一值索引,BITMAP为位图索引,省略为B-Tree索引。
2)<column_name> | <expression> ASC | DESC:可以对多列进行联合索引,当为expression时即“基于函数的索引”
3)TABLESPACE:指定存放索引的表空间(索引和原表不在一个表空间时效率更高)
4)STORAGE:可进一步设置表空间的存储参数
5)LOGGING | NOLOGGING:是否对索引产生重做日志(对大表尽量使用NOLOGGING来减少占用空间并提高效率)
6)COMPUTE STATISTICS:创建新索引时收集统计信息
7)NOCOMPRESS | COMPRESS<nn>:是否使用“键压缩”(使用键压缩可以删除一个键列中出现的重复值)
8)NOSORT | REVERSE:NOSORT表示与表中相同的顺序创建索引,REVERSE表示相反顺序存储索引值
9)PARTITION | NOPARTITION:可以在分区表和未分区表上对创建的索引进行分区
 
显示执行计划
 
SQL> explain plan for select * from emp where deptno=10;
PLAN_TABLE_OUTPUT                                                                                                                                                                                       
Plan hash value: 3956160932                                                                                                                                                                             
--------------------------------------------------------------------------                                                                                                                              
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |                                                                                                                              
--------------------------------------------------------------------------                                                                                                                              
|   0 | SELECT STATEMENT  |      |     3 |   111 |     3   (0)| 00:00:01 |                                                                                                                              
|*  1 |  TABLE ACCESS FULL| EMP  |     3 |   111 |     3   (0)| 00:00:01 |                                                                                                                              
-------------------------------------------------------------------------- 
 
创建索引
 
SQL> create index myindex
  2  on emp(deptno);
 
2.修改索引
 
1)重命名索引
 
alter index index_sno rename to bitmap_index;

 
2) 合并索引(表使用一段时间后在索引中会产生碎片,此时索引效率会降低,可以选择重建索引或者合并索引,合并索引方式更好些,无需额外存储空间,代价较低)
 
alter index index_sno coalesce;

 
3)重建索引
 
  方式一:删除原来的索引,重新建立索引
 
  方式二:
 
alter index index_sno rebuild;

 
3.删除索引
 
drop index index_sno;

 
4.查看索引
 
select index_name,index-type, tablespace_name, uniqueness from all_indexes where table_name ='tablename';

-- eg:    create index index_sno on student('name');
select * from all_indexes where table_name='student';

 
拓展,同义词
SQL> --为hr.employees起别名---》 同义词
SQL> create synonym hremp for hr.employees;
create synonym hremp for hr.employees
 


详解资料:(非常详细的解释了索引的结构和使用)
http://blog.csdn.net/iteye1011/article/details/17263241

posted @ 2017-09-13 16:58  赵安之  阅读(1119)  评论(0编辑  收藏  举报