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.首先查看如下语句的执行计划(此时表只有主键索引):

Oracle复合索引与空值的索引使用问题小结

2.添加IX_TEST(deptno,comm)后查看执行计划:

Oracle复合索引与空值的索引使用问题小结

Oracle复合索引与空值的索引使用问题小结

发现依然是全表扫描。

3.为deptno列添加非空约束后再次查看执行计划:

Oracle复合索引与空值的索引使用问题小结

Oracle复合索引与空值的索引使用问题小结

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,索引,空值
0
投稿

猜你喜欢

  • SQL Server 安全检查列表全攻略

    2008-01-29 13:31:00
  • Python实战之多种音乐格式批量转换

    2023-07-12 20:24:42
  • 简单好用的PHP分页类

    2023-11-22 09:32:39
  • 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
  • 如何防范利用刷新来“作弊”的计数器?

    2009-11-22 17:18:00
  • 用实例说明python的*args和**kwargs用法

    2021-05-04 08:25:55
  • 跨平台、多浏览器页面测试

    2008-06-24 11:54:00
  • Python脚本传参数argparse模块的使用

    2023-02-28 23:07:21
  • Django 创建/删除用户的示例代码

    2022-09-30 08:59:29
  • Python图像识别+KNN求解数独的实现

    2021-06-11 19:48:23
  • 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
  • asp之家 网络编程 m.aspxhome.com