千家信息网

Oracle 对某列的部分数据创建索引

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,Oracle 对某列的部分数据创建索引--- 说明:案例来自《 收获,不止SQL 优化 》请问:Oracle 可以针对某列的部分数据创建索引吗?比如 t1 表 id 列的数据有 1,2,3,4,5 。
千家信息网最后更新 2025年01月19日Oracle 对某列的部分数据创建索引

Oracle 对某列的部分数据创建索引

--- 说明:案例来自《 收获,不止SQL 优化

请问:Oracle 可以针对某列的部分数据创建索引吗?比如 t1 id 列的数据有 1,2,3,4,5 。可以只针对 id=3 的数据创建索引吗?

可以通过函数索引实现只针对id=3 的数据创建索引,例如 :

Create index i_t1_id on t(case when id=3 then 3 end);

请问:请举一个具体案例,并说明在该场景下使用部分索引性能更好?

案例如下:

---创建测试表t

SQL > create table t ( id int , status varchar2 ( 2 ));

--建立普通索引

SQL > create index id_normal on t ( status );

-- 插入数据

SQL > insert into t select rownum , 'Y' from dual connect by rownum <= 100000 ;

SQL > insert into t select 1 , 'N' from dual ;

SQL > commit ;

---数据分布

SQL > select count (*), status from t group by status ;

--- 收集统计信息

SQL > analyze table t compute statistics for table for all indexes for all indexed columns ;

--- 查询表 t ,查看执行计划

SQL > set linesize 1000

SQL > set autotrace traceonly

SQL > select * from t where status = 'N' ;

-- 看索引 信息

SQL > set autotrace off

SQL > analyze index id_normal validate structure ;

SQL > select name , btree_space , lf_rows , height from index_stats ;

备注 INDEX_STATS 存储的是最近一次 ANALYZE INDEX ... VALIDATE STRUCTURE 语句的结果,最多只有 当前会话的 一条数据

--- 创建函数索引的情况

SQL > drop index id_normal ;

SQL > create index id_status on t ( Case when status = 'N' then 'N' end );

SQL > analyze table t compute statistics for table for all indexes for all indexed columns ;

--- 再次查看执行计划

SQL > set autotrace traceonly

SQL > select * from t where ( case when status = 'N' then 'N' end )= 'N' ;

--观察id_status索引的情况

SQL > set autotrace off

SQL > analyze index id_status validate structure ;

SQL > select name , btree_space , lf_rows , height from index_stats ;

--- 在对比下之前普通索引的值

结论: 普通索引改成函数索引后,索引当前分配的空间 (BTREE_SPACE) 20230168 降到 7996 , 逻辑读consistent gets 5 降到 2 ,索引叶子数 (LF_ROWS) 100001 降到 1 ,索引高度 (HEIGHT) 3 降到 1 ,性能有所提升。

欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!

索引 数据 部分 普通 函数 案例 信息 性能 情况 公众 再次 只有 可以通过 叶子 备注 查询表 空间 结果 结论 语句 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 vray许可证服务器信息 影响网络安全因素包括什么 分服务器是什么意思 广州东域网络技术有限公司 松下电气软件开发待遇怎么样 服务器主板开机跳线图解 数据库管理服务器软件 广东易马软件开发有限公司 女生做软件开发有哪些优势 数据库授权无期限 简述防火墙对于网络安全的重要性 软件开发工程师试用期好过么 说好不哭音乐服务器 潍坊服务器 网络安全比赛魔方 武汉网络安全基地总体规划图 本溪企业管理软件开发 网络安全工作责任制全文 数据库及其管理应用系统 北京一七网络技术公司 手机上怎么查看游戏服务器 我的世界国际服创造服务器教程 软件开发功能和调整开发内容 美团技术团队数据库 检察院网络技术处整改措施 服务器可以用vpn吗 服务器管理的相关介绍 阿里云邮箱服务器端口 数据库建设的关键技术 网络安全漫画简单图
0