Oracle中复合索引与空值的索引怎么用
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这篇文章给大家分享的是有关Oracle中复合索引与空值的索引怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在QQ群里讨论一个SQL优化的问题,语句大致如下:selec
千家信息网最后更新 2025年02月07日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安全错误
数据库的锁怎样保障安全
熵体网络技术上海有限公司
数据库编写关系算法
Gbase数据库读写权限
山西新一代软件开发参考价格
网络安全与管理第二版课后
专科软件开发学数据库吗
小学生网络安全教育的日记
国家网络安全研究报告
网络安全应该注意的问题
华为平台管理服务器
说说你对关系型数据库的理解
丽水学软件开发需要学什么
古交软件开发报价单
服务器已爆满
华为网络技术大赛 叶华
护航网络安全消费
内网搭建kms激活服务器
信息安全风险数据库
中国水稻数据库中心绥研5
亿付云服务器是否合法的
斑马网络技术中心
中央网络安全巡查小组
泉州网络安全教育平台
闵行区制造软件开发成本
哈利波特忘了之前登陆的服务器
车载网络安全开发
连接数据库使用的文本格式
威之德软件开发
永恒之塔目前还有几个服务器
网络技术应用教学任务