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

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

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

linux

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1884812.html

(0)
上一篇 2025年2月22日 12:01:44
下一篇 2025年2月22日 12:02:00

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Oracle 11g中Temp临时表空间、文件的新特性

    临时表空间是Oracle体系结构中比较特殊的结构。通常情境下,数据库使用者只需要设置对应的临时表空间(到用户),临时段分配等工 临时表空间是oracle体系结构中比较特殊的结构。通常情境下,数据库使用者只需要设置对应的临时表空间(到用户),…

    数据库 2025年2月23日
    100
  • Oracle SQL 执行计划和分析小结

    Oracle有多种方式获得一条SQL语句的查询计划,比如使用explain plan命令,在PLSQL Developer里面按F5快捷键等,但是作为SQL调优, oracle有多种方式获得一条sql语句的查询计划,比如使用explain …

    数据库 2025年2月23日
    100
  • Oracle空间数据库函数使用

    最近一段时间一直在用Oracle的空间数据库做一些空间数据处理和分析功能,写这篇文章主要是做一个笔记,毕竟好记性不如烂笔头嘛。 最近一段时间一直在用oracle的空间数据库做一些空间数据处理和分析功能,写这篇文章主要是做一个笔记,毕竟好记性…

    数据库 2025年2月23日
    100
  • DB2 SQL0902C 解决实例

    我在其他主机上对数据库进行在线备份后打算在该主机上进行DB2的还原遭遇SQL0902C A system error (reason code = 8) occurred. 周日开发环境在对数据库进行归档删除时,将数据库重启之后,数据库无法…

    数据库 2025年2月23日
    100
  • Oracle下session的查询与删除

    Oracle下session的查询与删除 1、查询当前session SQLgt; select username,sid,serial# from v$session where username is not oracle下sessio…

    数据库 2025年2月23日
    100
  • undo Segment深入解析

    在undo自动管理时,设置了undo_retention以后,undo块就存在四种状态。Active:表示正在使用该undo的事务还没有提交或回滚。Inac 在undo自动管理时,设置了undo_retention以后,undo块就存在四种…

    数据库 2025年2月23日
    100
  • MySQL的自动化安装部署

    有过MySQL运维的人应该都清楚,线上的MySQL一般都采用源码编译,因为这样才可以根据企业的各自需要选择要编译的功能,虽然MySQL的 有过mysql运维的人应该都清楚,线上的mysql一般都采用源码编译,因为这样才可以根据企业的各自需要…

    数据库 2025年2月23日
    100
  • Oracle常用系统查询

    1 查询系统所有对象 SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS FROM DBA_OBJECTS W 1  查询系统所…

    数据库 2025年2月23日
    100
  • Oracle数据泵详解

    数据泵与常规方式对比:Oracle 10g开始引入数据泵,与传统exp/imp相比,数据泵可以作业分离,允许挂起和恢复导入导出任务,可以从 数据泵与常规方式对比:oracle 10g开始引入数据泵,与传统exp/imp相比,数据泵可以作业分…

    数据库 2025年2月23日
    100
  • Oracle函数-高阶篇

    下面整理了部分Oracle函数-高阶篇: 1、 CATSTR 举例:SELECT CATSTR(COLUMN_NAME) NAME_LIST FROM DBA_TAB_COLUMNS WHERE TR 下面整理了部分oracle函数-高阶篇…

    数据库 2025年2月23日
    100

发表回复

登录后才能评论