Oracle中复合索引与空值的索引怎么用
发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,这篇文章给大家分享的是有关Oracle中复合索引与空值的索引怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在QQ群里讨论一个SQL优化的问题,语句大致如下:selec
千家信息网最后更新 2025年11月06日Oracle中复合索引与空值的索引怎么用
这篇文章给大家分享的是有关Oracle中复合索引与空值的索引怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
在QQ群里讨论一个SQL优化的问题,语句大致如下:
select A,min(B) from table group by A;--A,B都没有not null约束,A列无空值,B列有空值。--存在复合索引IX_TEST(A,B)
于是手动测试,环境采用Oracle自带的scott用户下的emp表。
1.首先查看如下语句的执行计划(此时表只有主键索引):
2.添加IX_TEST(deptno,comm)后查看执行计划:

发现依然是全表扫描。
3.为deptno列添加非空约束后再次查看执行计划:
4.总结:
Btree索引是不存储空值的,这个是所有使用Btree索引的数据库的共同点。
在本例中我们创建了deptno,comm的符合索引。如果deptno没有非空约束,那么说明有的record不会出现在索引中,此时想要找到min(comm)就必须回表才能确定deptno为null的行是否有comm的值。此时优化器认为全表扫描比扫描索引再回表更为合理,因此选择全表扫描。
当我们添加了非空约束后,deptno不可能为空,因此索引的key值数等于表总行数,另一列comm即便为空也不影响min()取值,只需要扫描索引即可得到所需结果,此时优化器选择索引扫描。
而在Mysql中无论复合索引首列是否存在非空约束,都会使用索引,deptno为null的会全部分在一组取min(comm),可能是Mysql的BTREE索引与Oracle的有所不同,使得首列为空都可以无需回表。
最后:Oracle的列能添加非空约束的一定要添加。
感谢各位的阅读!关于"Oracle中复合索引与空值的索引怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
索引
内容
更多
篇文章
语句
选择
不同
不错
实用
共同点
再次
只有
总行
手动
数据
数据库
文章
有所不同
环境
用户
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库安全项目部署
用网页上传数据到数据库
奉贤区软件开发解决方案
数据库中表和用户的作用
防网络安全作文500字
文档是软件开发与软件管理
数据库窗体选项组的命名
AWS服务器端口转发
分布式时控数据库
网络安全主题班会教案小学六年级
有哪些网站提供软件开发平台
海丰实验中学塔式服务器
数据库mdf文件是什么
存算分离数据库部署
海军网络安全宣传
缺少数据库的包
snc网络技术
比太软件开发
服务器硬盘为什么有几个分区
服务器换了影响收录吗
顶级网络安全工程师怎么学的
教育局网络安全专项治理方案
物联网短距离网络技术
圣诚网络技术有限公司
网络安全课程三级项目
sql分离数据库怎么没了
数据库图标怎么添加
网吧服务器和硬盘哪个好用
启用源服务器支持的英文
全门户网络技术服务协议