Oracle中复合索引与空值的索引怎么用
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章给大家分享的是有关Oracle中复合索引与空值的索引怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在QQ群里讨论一个SQL优化的问题,语句大致如下:selec
千家信息网最后更新 2026年10月31日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安全错误
数据库的锁怎样保障安全
科技赋能下的互联网金融
疫情对互联网科技公司影响
互联网科技的英文
智慧科技互联网
新浪科技互联网
上游互联网科技
互联网科技类展会
博兴的互联网电子科技公司
南平创想时代互联网科技有限公司
小米互联网科技园入驻
互联网科技融合创新
上海乐五互联网科技有限公司
新氧科技和美国互联网有关系吗
国产互联网科技公司
中国互联网公司的科技投入
互联网时代高科技布局
唐山双旺合互联网科技产业园
长沙易易互联网科技有限公司
瑞安市蟠桃会互联网科技有限公司
恒生科技互联网指数十大成分股
科技平台互联网
北京互联网科技
金融科技与互联网金融
银优互联网科技有限公司
互联网科技宣传片
卫星互联网科技股票
广州优美互联网科技
互联网企业和科技型企业
工业互联网科技成果转化
互联网领先科技成果宣传视频