视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oraclecasewhen索引空值索引位图索引
2020-11-09 10:43:11 责编:小采
文档


T1表里面有200W条数据,其中ID=2只有10条记录,查询ID=2时就可以用到case when索引。 建索引可以这样: CREATE INDEX I_1 ON T1(

T1表里面有200W条数据,其中ID=2只有10条记录,查询ID=2时就可以用到case when索引。

建索引可以这样:

CREATE INDEX I_1 ON T1(CASE WHEN ID>1 THEN ID ELSE NULL END);

或者类似CASE ID WHEN 2 THEN 2...或者不需要大于小于,可以用DECODE

查询的SQL也要改:

SELECT * FROM T1 WHERE ID=2;

改为

SELECT * FROM T1 WHERE (CASE ID WHEN 2 THEN 2 ELSE NULL END)=2;

这个WHERE后面的括号要跟索引内容一模一样。总之这还是一个函数索引。

访问的数据块从几千个下降到几个。

这个索引原因是空值NULL不加入索引中,这样索引块其实只包含ID=2的很少的几行。

当查询条件WHERE ID IS NULL时,想使用索引的话,,可以这样建一个联合索引:

CREATE INDEX I_2 ON T1(ID,0);

将执行索引扫描。

位图索引构造与B树索引不同。假如列GENDER只存在两个值,在上面建一个位图索引的话,就生成两个位图,每个位图中包含对应的所有的行号。其中的具体实现比较复杂,还有起止行等等概念。

位图索引不适合更新频繁的应用场景,比如在线联机系统使用位图索引必须慎重。因为如上,当INSERT 一条GENDER=1的数据,那全表所有GENDER=1的行都会被锁。

位图索引一般适用于分析系统,而更新数据前有必要时也要删除索引,查询时再重建。

下载本文
显示全文
专题