当前位置: 首页 > news >正文

Oracle SQL语句没有过滤条件,究竟是否会走索引??

答案是:可能走索引也可能不走索引,具体要看列的值可不可为null,Oracle不会为所有列的nullable属性都为Y的sql语句走索引。

例子:

create table t as select * from dba_objects;
CREATE INDEX ix_t_name ON t(object_id,  object_name, owner);
SELECT object_id, object_name, owner FROM t;

看到网上很多的文章都会说第三个SQL语句没有where条件,肯定不走索引,或者 说 这个语句的列上都有索引,会走覆盖索引,真的是这样吗?

第三个DQL语句会走索引吗? --不会。因为虽然查询的这三个列都被覆盖索引包含在内,但这三个列都可为null,正如开篇所说——Oracle不会为全都为null的行走索引。执行计划如下:

可以看到这三个列虽然都有索引,但这三个列的nullable属性都是Y,也就是都可为空,所以索引将失效,该语句将走全表扫描。

解决这个问题,至少将其中一列的nullable属性设置为N。这样就保证了每一行都将在索引中。

alter table t modify object_name not null;

再次查询同样的SQL语句,可以看到没有where条件的SQL语句也走了索引。

所以,一个sql语句没有where条件会不会走索引是一个有争议的问题。所以碰到这种问题只需要记得

Oracle不会为所有列的nullable属性都为Y的SQL语句走索引。

所以,我们也可以换一种方式解决,为object_id添加主键约束? 设置其它两列为notnull? 都是解决问题的方案。
http://www.lryc.cn/news/453209.html

相关文章:

  • Java中参数传递:按值还是按引用?
  • Linux忘记root用户密码怎么重设密码
  • 【Web】复现n00bzCTF2024 web题解(全)
  • 仿RabbitMQ实现消息队列客户端
  • CSS | 面试题:你知道几种移动端适配方案?
  • 【web安全】——XSS漏洞
  • JAVA基础语法 Day11
  • 知识图谱入门——7:阶段案例:使用 Protégé、Jupyter Notebook 中的 spaCy 和 Neo4j Desktop 搭建知识图谱
  • 【AIGC】VoiceControl for ChatGPT指南:轻松开启ChatGPT语音对话模式
  • 基于SpringCloud的微服务架构下安全开发运维准则
  • vue的图片显示
  • 深度学习06:线性回归模型
  • Angular ng-state script 元素的生成机制介绍
  • 小程序-全局数据共享
  • vSAN01:vSAN简介、安装、磁盘组、内部架构与调用关系
  • Apache NiFi最全面试题及参考答案
  • 基于Docker部署最新版本SkyWalking【10.1.0版本】
  • 如何在 Ubuntu 18.04 上使用 LEMP 安装 WordPress
  • shadcn-vue 快速入门(2)
  • Oracle数据恢复—异常断电导致Oracle数据库报错的数据恢复案例
  • 数据结构-4.1.特殊矩阵的压缩存储
  • Hive数仓操作(十四)
  • SpringBoot技术:实现古典舞在线交流平台的秘诀
  • 自动驾驶系列—全面解析自动驾驶线控制动技术:智能驾驶的关键执行器
  • YOLO11改进|卷积篇|引入可变核卷积AKConv
  • 推荐 uniapp 相对好用的海报生成插件
  • MySQL表操作(进阶)
  • 【设计模式】软件设计原则——接口隔离迪米特
  • 【C++】——list的介绍和模拟实现
  • B树系列解析