index

/*建立惟一索引(unique index)*/

SQL> create table tab_idx(id int,name varchar2(24));

Table created.

SQL> desc tab_idx;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)
 NAME                                               VARCHAR2(24)

SQL> create unique index unidx_name on tab_idx (name);

Index created.

SQL> insert into tab_idx values(0,'arcerzhang');

1 row created.

SQL> insert into tab_idx values(1,'arcerzhang');
insert into tab_idx values(1,'arcerzhang')
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.UNIDX_NAME) violated


SQL> 
往unique index上插入相同数值.

/*建立非惟一索引(nounqiue index)*/

SQL> create table tab_idx2 (id int,name varchar2(24));

Table created.
SQL> create index unidx_name_2 on tab_idx2(name);

Index created.

SQL> insert into tab_idx2 values(0,'arcerzhang');

1 row created.

SQL> insert into tab_idx2 values(1,'arcerzhang');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from tab_idx2;

        ID NAME
---------- ------------------------
         0 arcerzhang
         1 arcerzhang

SQL>           
往nounqiue index插入相同数值.

/*建立逆序索引*/ 

CREATE INDEX i ON t (a,bc,) REVERSE;
View Code

/*将逆序索引转换为常规索引*/

用户能够在REBUILD子句后添加NOREVERSE关键字讲一个逆序键索引(reverse key index)转换为常规的索引:并发

ALTER INDEX i REBUILD NOREVERSE;
View Code

若是REBUILD子句后没有使用NOREVERSE关键字,那么逆序键索引(reverse key index)被重建后仍将保持逆序.oracle

位图索引bitmap index 

bitmap index -> 适合DSS系统.(特色:不会常常地、频繁地更新);对于bitmap index对应的列数据,常常的更新,致使cpu负荷加大,锁竞争激烈.app

b-tree index -> 适合OLTP系统.(特色:常常、频繁地更新;)less

索引的目标是为用户提供指向包含特定键值(key value)的数据行的指针.在常规的索引中,Oracle将各行的键值及与此键值对应的一组ROWID存储在一块儿,从而实现了上述目标.而在位图索引(bitmap index)中,只须要存储每一个键值的位图(bitmap),而非一组ROWID.ide

位图中的每一位对应一个可能ROWID.若是某一位被置位,则代表这与此对应的ROWID所指向的行中包含此位所表明的的键值.oracle经过一个映射函数(mapping function)将位信息转化为实际的ROWID,所以虽然位图索引内部的存储结构与常规索引不一样,但她一样能实现常规索引的功能.当不一样值的索引键的数量较少时,位图索引的存储效率至关高.(男\女).函数

若是在WHERE子句内引用的多个列上都建有位图索引(bitmap index),那么进行位图索引扫描时(bitmap indexing)能够将各个位图索引融合咋一块儿.不知足所有条件的行能够被预先过滤掉.所以位图索引可以极大地提升查询的响应时间.性能

数据仓库应用中位图索引的优点大数据

数据仓库应用(data warehousing application) 的特色是数据量巨大,执行的多为自定义查询(ad hoc query),且并发事务较少.这种环境下使用位图索引(bitmap index)具有以下优点:spa

  • 可以减小大数据量自定义查询的响应时间
  • 与其余索引技术相比能节省大量存储空间
  • 即便硬件配置较低也能显著提升性能
  • 有利于并行DML和并行加载

为一个大表创建传统的平衡树索引(B-tree index)可能占用极大的存储空间,索引有可能比数据表还要大数倍.而创建一个位图索引(bitmap index)所占的空间比被索引数据还要小得多.3d

位图索引(bitmap index)不适用与OLTP系统,由于这样的系统中存在大量对数据进行修改的并发事务.位图索引主要用于数据仓库系统中(data warehourcing)的决策支持功能,在这种环境下用户对数据的操做主要是查询而非修改.

主要进行大于(greater than)或小于(less than)比较的列,不适宜使用位图索引(bitmapt index)。例如,WHERE子句中常会将salary列和一个值进行比较,此时更适合使用平衡树索引(B-tree index)。位图索引适用等值查询,尤为是存在AND,OR,NOT等逻辑操做符的组合时.

bitmap index适合基数较小的列,b-tree index适合基数较大的列.

举例说明:一张表包含100w条数据,其中的一列包含一万个不相同的值,就能够考虑在此列上建立位图索引.此列上位图索引的查询性能将超过 b-tree index,当此列与其余列做为组合条件时效果尤其明显.假如一张表中包含100w条数据,其中一列中存放是的身份帐号吗,那么此列千万不要建立bitmap index,而是建立b-tree index.

位图索引能够包含键值为NULL的行. 

用户能够在分区表上建立位图索引的前提是分区表必须是本地的,只有非分区表才能使用全局位图索引.

位图示例 

客户编号 婚姻情况 地区 性别 收入水平
101 单身 东部 男性 一级
102 已婚 中部 女性 四级
103 已婚 西部 女性 二级
104 离异 西部 男性 四级
105 单身 中部 女性 二级
106 已婚 中部 女性 三级

 

 

 

 

 

 

 

地区=‘东部’ 地区='中部' 地区='西部'
1 0 0
0 1 0
0 0 1
0 0 1
0 1 0
0 1 0

 

 

 

 

 

 

 

业务分析员在统计公司客户的地区分布趋势时,须要知道"住在中部或西部地区的已婚客户有多少"?查询SQL以下:

SELECT COUNT(*) FROM CUSTOMER WHERE MARITAL_STATUS = 'married' AND REGION IN ('central','west');

相关文章
相关标签/搜索