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

news/2024/10/5 18:11:01 标签: 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.niftyadmin.cn/n/5691137.html

相关文章

数据集-目标检测系列- 货船 检测数据集 freighter>> DataBall

数据集-目标检测系列- 货船 检测数据集 freighter>> DataBall 数据集-目标检测系列- 货船 检测数据集 freighter>> DataBall 数据量:3k 想要进一步了解,请联系。 DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种…

python中的函数介绍

文章目录 1.函数1.1 语法格式1.2 函数参数1.3 函数的返回值1.4 变量作用域1.5 函数的执行过程1.6 链式调用1.7 嵌套调用1.8 函数栈帧1.9 函数递归1.10 参数默认值1.11 关键词参数 1.函数 无论是编程中的函数还是数学中的函数,本质都是差不多的,丢给函数…

软件设计师——数据结构

本博文所有内容来自于B站up主zst_2001 目录 时间复杂度 常规数据结构 链表 栈与队列 ​编辑 串 数组 树 卡特兰数: 平衡二叉树 哈夫曼 图 AOV 排序 顺序 折半 哈希 时间复杂度 常规数据结构 链表 栈与队列 串 找i位置前面的字符串&#xff0c…

优优嗨聚集团:债务纠纷下的个人财务困境揭秘

在当今社会,随着经济活动的日益频繁与复杂化,债务问题已成为许多人生活中难以回避的挑战之一。债务纠纷,作为这一问题的直接体现,不仅关乎金钱的得失,更深刻地影响着个人的生活方方面面,从心理健康、家庭关…

电器自动化入门08:隔离变压器、行程开关介绍及选型

视频链接:3.4 电工知识:三相交流异步电动机自动往返行程控制及控制变压器选型_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW?p8&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.隔离(控制)变压器 2.行程开…

win11无法输入中文,任务栏中输入法消失

一、问题描述 今日起了个大早,一打开电脑,王德发,我的输入法呢???我没了输入法就像西方没了耶路撒冷,刚睡醒懵笔的我瞬间懵笔了┏┛墓┗┓…(((m -__-)m 二、解决办法 心急如焚的我立马上网…

Salesforce AI 推全新大语言模型评估家族SFR-Judge 基于Llama3构建

在自然语言处理领域,大型语言模型(LLMs)的发展迅速,已经在多个领域取得了显著的进展。不过,随着模型的复杂性增加,如何准确评估它们的输出就变得至关重要。传统上,我们依赖人类来进行评估&#…

isinstance()学习

aa {} if isinstance(aa,dict):print("是")aa 2 if isinstance(aa,dict):print("是")aa 2 if isinstance(aa,int):print("是")aa [] if isinstance(aa,list):print("list")aa [1,2,3] if isinstance(aa,list):print("list"…