Oracle复合索引与空值的索引使用问题小结
作者:Leohahah 时间:2024-01-21 17:35:38
昨天在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
标签:oracle,索引,空值
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
SQL Server 安全检查列表全攻略
2008-01-29 13:31:00
Python实战之多种音乐格式批量转换
2023-07-12 20:24:42
![](https://img.aspxhome.com/file/2023/4/128544_0s.png)
简单好用的PHP分页类
2023-11-22 09:32:39
![](https://img.aspxhome.com/file/2023/6/111676_0s.jpg)
RSS2.0规范中文版
2008-06-25 13:53:00
Python安装docx依赖包教程
2023-02-11 22:23:36
全面了解python字符串和字典
2021-05-03 21:06:43
Django框架下在URLconf中指定视图缓存的方法
2023-10-03 01:54:28
python的三目运算符和not in运算符使用示例
2021-07-18 23:36:35
![](https://img.aspxhome.com/file/2023/0/77650_0s.png)
如何防范利用刷新来“作弊”的计数器?
2009-11-22 17:18:00
用实例说明python的*args和**kwargs用法
2021-05-04 08:25:55
跨平台、多浏览器页面测试
2008-06-24 11:54:00
![](https://img.aspxhome.com/file/UploadPic/20086/24/2008624115920735s.gif)
Python脚本传参数argparse模块的使用
2023-02-28 23:07:21
![](https://img.aspxhome.com/file/2023/4/97724_0s.png)
Django 创建/删除用户的示例代码
2022-09-30 08:59:29
![](https://img.aspxhome.com/file/2023/1/70761_0s.png)
Python图像识别+KNN求解数独的实现
2021-06-11 19:48:23
![](https://img.aspxhome.com/file/2023/6/130946_0s.png)
c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)
2024-01-13 08:12:32
JavaScript中实现字符串的取左取右(实现left和right功能)
2009-07-20 12:39:00
Python requests及aiohttp速度对比代码实例
2023-11-22 14:40:37
MySQL中基本的用户和权限管理方法小结
2024-01-24 20:03:49
Python 获取指定文件夹下的目录和文件的实现
2023-12-23 22:44:29
asp.net中调用winrar实现压缩解压缩的代码
2023-07-18 14:30:30