• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Oracle case when索引 空值索引 位图索引

mysql 搞代码 4年前 (2022-01-09) 83次浏览 已收录 0个评论

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的行都会被锁。

位图索引一般适用于分析系统,而更新数据前本文来源gaodai#ma#com搞@@代~&码网^有必要时也要删除索引,查询时再重建。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Oracle case when索引 空值索引 位图索引

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址