索引定义
索引是为了快速检索和定位数据行而创建的一种数据结构
创建索引的语法格式:
CREATE [OR REPLACE] [CLUSTER|NOT PARTIAL][UNIQUE | BITMAP| SPATIAL] INDEX [IF NOT EXISTS] <索引名>
ON [<模式名>.]<表名>(<索引列定义>{,<索引列定义>}) [GLOBAL][<PARTITION子句>][<表空间子句>][<STORAGE子句>] [NOSORT] [ONLINE] [REVERSE] [UNUSABLE] [<PARALLEL项>];
<索引列定义>::= <索引列表达式>[ASC|DESC]
<表空间子句>::= TABLESPACE <表空间名>
<STORAGE子句>::=<STORAGE子句1>|<STORAGE子句2>
<STORAGE子句1>::= STORAGE(<STORAGE1项> {,<STORAGE1项>})
<STORAGE1项> ::=
[INITIAL <初始簇数目>] |
[NEXT <下次分配簇数目>] |
[MINEXTENTS <最小保留簇数目>] |
[ON <表空间名>] |
[FILLFACTOR <填充比例>]|
[BRANCH <BRANCH数>]|
[BRANCH (<BRANCH数>, <NOBRANCH数>)]|
[NOBRANCH ]|
[CLUSTERBTR]|
[SECTION (<区数>)]|
[STAT NONE]
<STORAGE子句2>::= STORAGE(<STORAGE2项> {,<STORAGE2项>})
<STORAGE2项> ::= [ON <表空间名>]|[STAT NONE]
<PARALLEL项> ::=
NOPARALLEL |
PARALLEL [<并行数>]
<PARTITION子句>
索引分类
从物理存储角度进行分类,可分为聚集索引和非聚集索引。
聚集索引(又称为一级索引、主索引):聚集索引就是按照聚集索引键构造一棵 B+ 树,表数据存储在 B+ 树叶子节点上,通过定位索引可直接在 B+ 树中找到数据。每一个表有且只有一个聚集索引。
非聚集索引(又称为二级索引、辅助索引):将二级索引列和聚集索引列共同存储在 B+ 树叶子节点上。如果查找非聚集索引键值或聚集索引键值可直接在 B+ 树中找到;如果查找索引键值以外的数据,则需要回到一级索引中进行查找。每一个表可以有多个非聚集索引。
从索引功能角度进行分类,可分为唯一索引、函数索引、位图索引、位图连接索引、全文索引、空间索引、数组索引、普通索引。
唯一索引:索引数据根据索引键唯一;
函数索引:包含函数/表达式的预先计算的值;
位图索引:对低基数的列创建位图索引;
位图连接索引:针对两个或者多个表连接的位图索引,主要用于数据仓库中;
全文索引:在表的文本列上而建的索引。具体内容请参考第 18 章;
空间索引:在空间数据上创建的索引,专用于 DMGEO 包中;
数组索引:在一个只包含单个数组成员的对象列上创建的索引;
普通索引:除了唯一索引、函数索引、位图索引、位图连接索引、全文索引、空间索引、数组索引以外的索引,均为普通索引
索引管理
创建聚集索引
create cluster index clu_emp_sex on emp(sex);
explain select * from emp where sex=‘woman’;
创建唯一索引
create unique index uni_emp_name on emp(name);
explain select * from emp where name=‘zhangsan’;
创建位图索引
位图索引与聚集索引不能构建在同一表上
create bitmap index btm_emp_address on emp(address);
explain select * from emp where address=‘wuhan’;
删除索引
drop index index_name;