Oracle Index 和null 研究

Oracle 索引优化指南:CREATE INDEX命令高级用法 Oracle索引技术摘要 索引是Oracle数据库提升查询性能的核心技术。本文系统介绍了Oracle索引的完整知识体系,包括: 索引类型:详解B树索引、位图索引、函数索引等五大类型,对比其适用场景和特点 创建优化:从基础B树索引到高级函数索引的创建语法,包含存储参数配置等优化技巧 高级技术:深入解析位图连接索引、反向键索引等特殊索引的实现原理 优化策略:提供索引选择性分析、合并策略等专业优化方法 维护监控:包含索引重建、使用统计等维护方案 文中通过电商订单查询等实际案例,配合参数说明和流程图,全面展示了Or 阅读详情

Indexing null values

安装关系数据库理论, null表示未知,Oracle b-tree index是不包含null的。考虑如下表:

create table tt (t_id number, t_name varchar2(10));
create index tt_idx on tt(t_name);

select * from tt where t_name is null是不会使用index scan的,这经常会造成性能问题。

解决办法就是:创建一个函数索引,并在select 中包含该函数,如:

create index tt_idex on tt( nvl(t_name), 1);
select * from tt where nvl(t_name,1)=1;

从11g开始有另一个方法:

create index tt_idx on tt(t_name asc, 1);
这里1可以是任意数字或字母。而这时,select语句的谓词不需要更改,还是t_name is null.

Uniqueness and null

drop index tt_idx;
create unique index tt_idx on tt(t_name);
insert into tt values(1, null);
commit;
insert into tt values(1, null);
commit;
这段SQL可以执行成功。这是因为null不被索引包含。

create table ttt2  (tt2_id number, tt21 varchar2(10), tt22 varchar2(10));
create unique index ttt2_idx on ttt2(tt21, tt22);
--Successful
insert into ttt2 values(1, null, null);
insert into ttt2 values(1, null, null);
commit;
--Fail
insert into ttt2 values(1, '1', null);
insert into ttt2 values(1, '1', null);
commit;
第二个事务会失败。因为null不被索引包含, 两个'1'就是重复值!

Conditional uniqueness

假如有需求:

  • tt21, tt22都可以为null
  • 仅在tt21和tt22都不为null时,需要保证唯一性!

这时的解决方法:Function based index 。

create table ttt2  (tt2_id number, tt21 varchar2(10), tt22 varchar2(10));
create or replace function conditional_uniqueness(p_tt21 varchar2, p_tt22 varchar2) 
return varchar2
DETERMINISTIC
as
begin
  if(p_tt21 is not null and  p_tt22 is not null) then
    return p_tt21||p_tt22;
  else
    return null;
  end if;
end;
create unique index ttt2_idx on ttt2(conditional_uniqueness(tt21, tt22));
--Fail!
insert into ttt2 values(1, '1','1');
insert into ttt2 values(1, '1','1');
--Successful
insert into ttt2 values(1, '1',null);
insert into ttt2 values(1, '1',null);
--Successful
insert into ttt2 values(1, null,'1');
insert into ttt2 values(1, null,'1');
commit;


基于Oracle AI数据库技术的暗数据治理框架与价值转化实现研究(下) 基于Oracle AI数据库技术的暗数据治理框架与价值转化实现研究 阅读详情

相关推荐

[Oracle] 获取执行计划的各方法总结

总的结论: 一.获取执行计划的6种方法(详细步骤已经在每个例子的开头注释部分说明了): 1. explain plan for获取;  2. set autotrace on ;  3. statistics_level=all; 4. 通过dbms_xplan.display_cursor输入sql_id参数直接获取 5. 10046 trace跟踪 6. awrsqrpt.sql

Zhu_Julian's Notes (朱显杰的技术博客) 4186

oracle+index+include,noncluster include index

包含列解析所谓的包含列就是包含在非聚集索引中,并且不是索引列中的列。或者说的更通俗一点就是:把一些底层数据表的数据列包含在非聚集索引的索引页中,而这些数据列又不是索引列,那么这些列就是包含列。同时,这些包含列并不会对索引中的条目有影响。好吧,为了使得问题稍微清楚一点,我用个简单的图示说明一下:我们可以用下面的语句在创建索引的时候加入包含列,代码如下:双击代码全选123CREATENONCLUSTE...

weixin_35062801的博客 538

oracle等待事件dbcpu,【案例】Oracle等待事件resmgr:cpu quantum 产生原因和解决办法

天萃荷净Oracle研究中心案例分析:发现一个关于Oracle数据库等待事件 resmgr:cpu quantum 的案例。本站文章除注明转载外,均为本站原创: 转载自love wife & love life —Roger 的Oracle技术博客本文链接地址: resmgr:cpu quantum导致的性能问题昨天给某客户升级的系统,经过TDE加密以后,今天上午出现严重的性能问题,表现的...

weixin_42510608的博客 1025

oracle索引include,oracle 索引 管理

索引1.creating function-based indexessql> create index summit.item_quantity on summit.item(quantity-quantity_shipped);2.create a B-tree indexsql> create [unique] index index_name on table_name(col...

weixin_33561350的博客 403

ACL访问控制列表详解:原理、配置与应用

如果发现ACL规则没有达到预期效果,需要检查ACL规则配置是否正确,是否在正确的接口和方向上应用,以及规则顺序是否合理(ACL规则按顺序匹配,匹配到即停止)。其中,rule-id是规则的编号,用于确定规则的匹配顺序;例如,应该先配置针对特定主机和特定端口的规则,再配置针对整个网段的规则,最后配置允许所有流量的规则,这样才能确保ACL按照预期工作,避免因规则顺序不当导致的访问控制失效。例如,应该先配置针对特定主机的规则,再配置针对整个网段的规则,最后配置允许所有流量的规则,这样才能确保ACL按照预期工作。

彭大帅的博客 1045

使用mmdetection快速复现计算机视觉顶会论文

使用mmdetection中支持的算法运行自定义数据集

m0_56896669的博客 2420

Create Index语句的Include作用

在 SQL Server 2005 中,可以通过将非键列添加到非聚集索引的叶级别来扩展非聚集索引的功能。通过包含非键列,可以创建覆盖更多查询的非聚集索引。这是因为非键列具有下列优点: 它们可以是不允许作为索引键列的数据类型。  在计算索引键列数或索引键大小时,数据库引擎 不考虑它们。 当查询中的所有列都作为键列或非键列包含在索引中时,带有包含性非键列的索引可以显著提高查

guaiguaigirlma的专栏 2044

史上最小白之RNN详解

1.前言 网上目前已经有诸多优秀的RNN相关博客,但是我写博客的出发点主要是为了加深和巩固自己的理解,所以还是决定自己再进行一下总结和描述,如有不正确的地方欢迎指正~ 2.区分RNN 循环神经网络(Recurrent Neural Network),递归神经网络(Recursive Neural Network),你有没有发现他们的缩写都是RNN,那他们两个是同一回事儿吗?网上有一些博客把这两就当...

Tink1995的博客 4万+

Oracle数据库语法的使用

要为Oracle数据库中的具体字段加索引,可以按照以下步骤操作:确认需要添加索引的字段:首先,确定哪些字段需要添加索引。通常情况下,需要为经常被查询的字段添加索引,例如常用于WHERE子句的字段或JOIN操作的字段。查看现有的索引:使用DESCRIBE命令查看该表的索引情况。这将显示表的结构,包括索引信息。创建索引:使用命令创建索引。这将在"last_name"字段上创建一个名为"idx_last_name"的索引。验证索引:可以再次使用DESCRIBE命令验证索引是否被成功创建。

欢迎来到 ABin-阿斌的博客:写一生代码,创一世佳话,筑一览芳华。 1446

手把手教你用芯驰X9HP驱动MAX96755/MAX96752点亮智能座舱仪表屏(附完整寄存器配置表)

本文详细介绍了如何使用芯驰X9HP驱动MAX96755/MAX96752实现智能座舱仪表屏的完整开发流程,包括硬件架构解析、关键寄存器配置、Linux BSP集成及调试技巧。通过实战指南和完整寄存器配置表,帮助开发者快速掌握驱动开发核心技术,提升智能座舱系统的显示性能与稳定性。

weixin_30879169的博客 524

华为IPD实战:从概念到发布的完整流程拆解(附各阶段关键文档模板)

本文深入拆解华为IPD(集成产品开发)从概念到发布的完整实战流程,涵盖概念、计划、开发验证及发布生命周期四大阶段。详细解析了各阶段的核心活动、关键产出与决策评审点,并提供了如《初始业务计划书》等关键文档模板框架,旨在帮助企业将IPD理论转化为可执行的操作指南,提升研发效率与产品成功率。

weixin_29212429的博客 525

Oracle Hint "index_combine"对于like的局限性

Oracle Hint "index_combine"对于like的局限性 数据库版本:11.2.0.4.0 今天遇到1条问题SQL,优化遇到一点问题,SQL文本大概如下: 其中,col2和col3存在索引的且选择性都很高,col1的业务特性是只有两个值选择性低没有也不适合建Btree索引。 导致每次执行都是全表扫描,统计发现这条SQL每半小时执行次数大概在1200次左右。 select * ...

PiscesCanon的博客 421

Eplan2022 复制已有的宏文件生成新的原理图宏文件

Eplan2022 新建原理图宏文件

haier123888的博客 1万+

ORACLE索引研究

一.B-Tree索引: 1. 选项择索引字段的原则: l 在WHERE子句中最频繁使用的字段 l 联接语句中的联接字段 l 选择高选择性的字段(如果很少的字段拥有相同值,即有很多独特值,则选择性很好) l ORACLE在UNIQUE和主键字段上自动建立索引 l 在选择性很差的字段上建索引只有在这个字段的值分布非常倾斜的情况下下才有益(在这种情况下,某一,两个字段值比其它字值少出现很多) l

Firefoxboy的空军基地 433

数字后端:版图基础seal ring

seal ring结构是为了防止划片或封装对芯片造成破坏,从而在芯片与划片道(scribe line)之间添加的一圈保护环

m0_61544122的博客 1万+

【异常】OpenClaw提示异常 1302:您的账户已达到速率限制,请您控制请求频率

摘要:系统返回1302错误码提示"账户已达到速率限制",表明请求频率超过服务阈值。主要原因是并发请求数达上限或请求过于密集。解决方案包括:降低并发请求量、引入请求队列机制平滑流量,或根据服务规则提升账户权益等级以获取更高并发额度。建议优先优化请求频率控制策略,避免触发系统限流机制。

奶爸的编程之路,也就一周冷个三天 1141

(索引大PK )ORACLE VS MYSQL INDEX SKILL ROUND ONE

最近为了更能贴近优化ORACLE 生产数据库中的某些查询,开始研究ORACLE 的索引 和 其他数据库 有何不同,究竟每个数据库中的索引的共同点和不同点,又是什么,怎么能通过多种方式来模...

sql server的专栏 353

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

oracle临时表查询走索引,临时表不能利用索引的研究

前言:Oracle临时表能避免并发,提高程序的可伸缩性等诸多优点,但在查询时,有时不能有效利用索引。问题描述:有如下两张表,其中yd_yhjbda是普通表,有记录数10万条,TMP_JSHH_X为Oracle基于会话的临时表,有一条记录:表TMP_JSHH_XCREATE GLOBAL TEMPORARY TABLE TMP_JSHH_X(HH NUMBER(8),DFNY VARCHAR...

weixin_36285392的博客 1993

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【引用】Oracle全文检索方面的研究(全2)

3.2 Filter 属性 过滤器负责将各种文件格式的数据转换为纯文本格式,索引管道中的其他组件只能处理纯文本数据,不能识别 microsoft word 或 excel 等文件格式,filter 有charset_filter、 inso_filter、null_filter、user_filter、procedure_filter 几种类型。(可将文档格式转化为数据库文本格式等。)   ...

thomas0988 158

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Oracle数据库和达梦数据库中“外键“的一些细节

最近正进行达梦数据库的SQL审核工作研究,和Oracle相比,还是有些细节上的差异,从设计角度,也给了我们一些新的思路,不同的数据库,设计实现的路径,各有各的特长,有些经验值得我们做系统设计借鉴。以"外键"这个关系型数据库的一个对象为引子,众所周知,外键是从数据库的角度保证主子表关联正确的一种设计,在Oracle中,创建外键不会自动创建索引,这个有什么影响?因此,某些场景下,如果外键无索引,还是会产生一些隐患的,此时的解决方案,需要在应用端实现外键约束,或者添加外键的索引,避免产生锁表等的现象。

bisal的专栏 1045

ora-01654 unable to extend index

使用create table XXX as select * from XXX语句备份单张表时出现ora-01654 unable to extend index错误,网上查了一下都说可能是用户表空间不足导致的,虽然最后排查不是错误原因,但其间用到的相关查询还是在这里记录一下 select * from user_users; 查询用户信息 select username

Zzzheep的博客 2760

oracle防止sql注入proc,解密:Oracle怎么防SQL注入

昨天我们说了怎么绕过waf进行sql注入,今天我们继续这个话题,说说Oracle数据库本身在防sql注入方面做了哪些工作。Oracle从8i开始PL/SQL中涌现出了大量SQL注入漏洞,直至11.2版本才基本扫清了PL/SQL自身存在的SQL注入漏洞。但时至今日依然存在一些跨语言边界的注入漏洞和二阶SQL注入漏洞。在Oracle和SQL注入漏洞的战斗史中关键的两步分别在10gr2和11gr1达成。...

weixin_34160181的博客 1430

oracle sql 建议,Oracle提高sql执行效率的心得建议

Oracle提高sql执行效率的心得建议复制代码 代码如下:-->FROM子句中包含多个表的情况下,选择记录条数最少的表作为基础表-->解析WHERE子句是自下而上的 过滤条件要有顺序-->ORACLE会将'*'转换成列名-->DELETE会在rollback segment中存放可恢复信息,可以试试TRUNCATE-->COMMIT会释放:1.rollback se...

weixin_29281915的博客 329
上一篇: Oracle数据库字符集介绍
下一篇: 动态列转行
chncaesar
博客等级 码龄25年 13粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值