oracle索引有很多种 像 什么 B-tree 位图 全文 复合 反向索引 等等,可以大家都知道这些索引是用在什么场合上的嘛?
根据以往的项目经验罗列如下
五大索引创建语句和应用场合 (紧急备用)
0.B tree索引
create index 索引名 on 表名(列名);
场合:这是我们最长用的索引,一般创建在重复率较低字段中,如果是主键的话那是最好不过了,可以非常快速的定位rowid记录
1.位图索引 bitmap index create bitmap index 索引名 on 表名(列名);
场合:列的基数很少情况下,重复值很多,数据不会被经常更新的列建位图索引
例子:男/女 国家ID 适用于OLAP数据仓库批量检索数据
缺点:锁代价极高,修改一条位图索引段会锁定整个位图段
2.反向索引reverse index create index 索引名 on 表名(列名) reverse;
场合:列值始终增1,不是随机数,导致索引二叉树倾斜,使用反向索引来平衡二叉树
缺点:范围查找效率较低(因顺序打散),等值查找效率较高
3.函数索引 function index
create index 索引名 on 表名(函数(列名));
场合:当where子句中使用函数的列上创建的索引,先生成函数值在索引
4.复合压缩索引 compound compress index
create index 索引名 on 表名(列名) compress 1;
场合:在同时查询多列时要建复合压缩索引,把重复值较多的列放在最前面进行压缩,重复值越多压缩效果越好
例子:开始时间和结束时间做一个复合索引 where x and y
根据以往的项目经验罗列如下
五大索引创建语句和应用场合 (紧急备用)
0.B tree索引
create index 索引名 on 表名(列名);
场合:这是我们最长用的索引,一般创建在重复率较低字段中,如果是主键的话那是最好不过了,可以非常快速的定位rowid记录
1.位图索引 bitmap index create bitmap index 索引名 on 表名(列名);
场合:列的基数很少情况下,重复值很多,数据不会被经常更新的列建位图索引
例子:男/女 国家ID 适用于OLAP数据仓库批量检索数据
缺点:锁代价极高,修改一条位图索引段会锁定整个位图段
2.反向索引reverse index create index 索引名 on 表名(列名) reverse;
场合:列值始终增1,不是随机数,导致索引二叉树倾斜,使用反向索引来平衡二叉树
缺点:范围查找效率较低(因顺序打散),等值查找效率较高
3.函数索引 function index
create index 索引名 on 表名(函数(列名));
场合:当where子句中使用函数的列上创建的索引,先生成函数值在索引
4.复合压缩索引 compound compress index
create index 索引名 on 表名(列名) compress 1;
场合:在同时查询多列时要建复合压缩索引,把重复值较多的列放在最前面进行压缩,重复值越多压缩效果越好
例子:开始时间和结束时间做一个复合索引 where x and y