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
0
投稿
猜你喜欢
- 作为一名程序员,调试(debug)程序是一项必会的事情,在利用pycharm这个pythonIDE时,不好好利用其调试功能真的是太可惜了。借
- 如下所示:# -*- coding:utf-8 -*-import sysreload(sys)sys.setdefaultencoding
- 1.算法:(设查找的数组期间为array[low, high])(1)确定该期间的中间位置K(2)将查找的值T与array[k]比较。若相等
- 前提:安装xhtml2pdf https://pypi.python.org/pypi/xhtml2pdf/下载字体:微软雅黑;待转换的文件
- 表结构如下面代码创建 CREATE TABLE test_tb ( TestId int not null identity(1,1) pr
- 本文实例讲述了python单向链表的基本实现与使用方法。分享给大家供大家参考,具体如下:# -*- coding:utf-8 -*-#! p
- 本文实例讲述了Python使用pyodbc访问数据库操作方法。数据库连接数据库连接网上大致有两种方法,一种是使用pyodbc,另一种是使用w
- 网上大部分都是上传文件,于是个人参照网上一些博客的内容,写了一个把windows上目录上传到远程linux的一个小程序。下面是代码:clas
- 原作者:Jonathan 翻译:charlee原文:http://f6design.com/journal/2006/10/21/the-v
- Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum)。 * 的圣诞节期间,吉多·范罗苏姆为了在阿姆
- 图像轮廓Contours:轮廓轮廓是将没有连着一起的边缘连着一起。边缘检测检测出边缘,边缘有些未连接在一起。注意问题1.对象为二值图像,首先
- Python 跟 Python3 完全就是两种语言1、 import caffe FAILED环境为 Ubuntu 16 cuda
- lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节length(string)计算string所占的
- 自开始做项目以来,一直在用。这段存储过程的的原创者(SORRY,忘记名字了),写得这段SQL代码很不错,我在这个基础上,按照我的习惯以及思维
- python天数转日期字符串在利用python读取Excel的时候, 日期格式的单元格读取出来是数字,该数字表示1990年01月01日到该日
- 检查所使用的语句是否标准 /* 标准SQL和T-SQL之间有很多区别——太多了,这里就不说了。还有,如果你在SQL Server上工作, 那
- 经常上网的人一定碰到过找不到页面的情况,此时是否有点让人沮丧呢,本文介绍了一些404页面设计优秀的例子,当我们撞见些好玩可爱的页面时,有时反
- 本文实例讲述了Python实现查找系统盘中需要找的字符。分享给大家供大家参考。具体如下:'''Created on
- 需求分析:python实现一个远程通过网络邮件控制计算机重启或关机的项目。程序流程:过程分析:要实现本功能,首先要直到在本地如何通过Pyth
- 题目描述724. 寻找数组的中心下标 - 力扣(LeetCode) (leetcode-cn.com)给你一个整数数组 nums