Oracle复合索引与空值的索引使用问题小结
作者:Leohahah 发布时间:2024-01-21 17:35:38
标签: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复合索引与空值的索引使用问题小结网站的支持!
来源:https://www.cnblogs.com/leohahah/archive/2018/02/07/8425813.html


猜你喜欢
- Thinkphp6的日志问题日志级别debug, info, notice, warning, error, critical, alert
- Layer UI表格列日期格式化方法较为强大 也比较简单针对需要格式化的表格列 添加以下代码即可,templet : "<d
- 本文实例为大家分享了vue实现计时器的具体代码,供大家参考,具体内容如下这里做的是点击按钮开始与结束倒计时的功能<div class=
- 1、查询语句的执行顺序select[distinct] from join(如left 
- 本文为大家分享了两段PHP分页类,很实用,供大家参考,具体内容如下<?php class Page { private $
- JavaScript 读取、删除 Cookie 的函数* * WebFXCookie class */ fun
- 在利用QT编写GUI程序时经常需要一些交互操作,常见的有鼠标事件、键盘事件等。今天我们要实现的是在label中已经显示的图像中绘制矩形框,以
- 本文实例讲述了Java读取文件及基于正则表达式的获取电话号码功能。分享给大家供大家参考,具体如下:1、正则表达式正则表达式,又称 正规表示法
- 通过手动输入数据,将数据分成几部分存入数组中import osimport sysdef test(): bric
- 目录前言创建表关系多表数据操作 - 增删改一对多&一对一关系 - 增删改增加数据删除数据修改数据多对多关系 - 增删改增加多对多关系
- 看完本篇文章你可以:同步本地和服务器的全部或者部分文件本地debug,服务器跑实验在这之前你要确保服务器上已经创建好虚拟环境你本地已经安装好
- 运行环境:IIS脚本语言:VBScript数据库:Access/SQL Server数据库语言:SQL1.概要:不论是在论坛,还是新闻系统,
- 我们知道两个 set 对象之间,可以取交集、并集、差集、对称差集,举个例子:s1 = {1, 2,
- 1.前言数据库的重要性相信大家都有所了解,作为各种数据的电子资料夹,其中可能包含了各种信息,从企业员工信息到网站访问或成交数据无所不包,甚至
- mouseDown事件和mouseUp事件 大家知道,mouseDown事件和mouseUp事件的组合就是click事件,但是如果在链接上按
- 1.0简介三维图像技术是现在国际最先进的计算机展示技术之一,任何普通电脑只需要安装一个插件,就可以在网络浏览器中呈现三维的产品,不但逼真,而
- 本文实例讲述了Flask框架实现的前端RSA加密与后端Python解密功能。分享给大家供大家参考,具体如下:前言在使用 Flask 开发用户
- 图像轮廓Contours:轮廓轮廓是将没有连着一起的边缘连着一起。边缘检测检测出边缘,边缘有些未连接在一起。注意问题1.对象为二值图像,首先
- 有时候会遇到和上面类似的表单字段。我们可以给每个字段限制输入长度,当达到输入长度时自动切换焦点,以增强表单的易用性 <form id=
- 百度作业帮提问:python if not in 多条件 判断怎么写s = ['1','2'] 判断条件st