首页 > 数据库 >介绍一下Oracle的操作符优化

介绍一下Oracle的操作符优化

时间:2023-08-28 14:02:21浏览次数:37  
标签:LIKE 记录 查询 索引 操作符 SQL Oracle 优化


IN :

IN写出来的SQL比较容易写及清晰易懂但是性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:

ORACLE 试图将IN转换成多个表的连接,如果转换不成功会先执行IN里面的子查询,再查询外层的表记录,如果转换成功,则直接采用多个表的连接方式查询。所以用 IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。

推荐方法:在业务密集的SQL当中尽量不要采用IN操作符。

NOT IN:

不推荐使用,因为NOT IN不能应用表的索引。

推荐方案:用NOT EXISTS 或(外连接+判断为空)

<> 操作符(不等于)

不等于操作符不会用到索引的,对它的处理只会产生全表扫描。

推荐方案:用其它相同功能的操作运算代替,如 a<>0 改为 a>0 or a<0  a<>’’ 改为 a>’’

IS NULL 或IS NOT NULL操作(判断字段是否为空)

判断字段是否为空一般不会应用索引,因为B树索引是不索引空值的。

推荐方案:

用其它相同功能的操作运算代替,如 a is not null 改为 a>0 或a>’’等。

不允许字段为空,而用一个缺省值代替空值,如业扩申请中状态字段不允许为空,缺省为申请。

建立位图索引(有分区的表不能建,位图索引比较难控制,如字段值太多索引会使性能下降,多人更新操作会增加数据块锁的现象)。

> 及 < 操作符(大于或小于操作符)

大于或小于操作符一般不用调整,因为它有索引就会采用索引查找,但有的情况下可以对它进行优化,如一个表有100万记录,一个数值型字段A, 30万记录的A=0,30万记录的A=1,39万记录的A=2,1万记录的A=3。那么执行A>2与A>=3的效果就有很大的区别了,因为 A>2时ORACLE会先找出为2的记录索引再进行比较,而A>=3时ORACLE则直接找到=3的记录索引。

LIKE:

LIKE 操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会产生性能上的问题,如LIKE ‘%5400%’ 这种查询不会引用索引,而LIKE ‘X5400%’则会引用范围索引。一个实际例子:用YW_YHJBQK表中营业编号后面的户标识号可来查询营业编号 YY_BH LIKE ‘%5400%’ 这个条件会产生全表扫描,如果改成YY_BH LIKE ’X5400%’ OR YY_BH LIKE ’B5400%’ 则会利用YY_BH的索引进行两个范围的查询,性能肯定大大提高。

标签:LIKE,记录,查询,索引,操作符,SQL,Oracle,优化
From: https://blog.51cto.com/u_16237557/7263436

相关文章

  • 10条SQL优化技巧
    一、一些常见的SQL实践(1)负向条件查询不能使用索引select*fromorderwherestatus!=0andstauts!=1notin/notexists都不是好习惯可以优化为in查询:select*fromorderwherestatusin(2,3)(2)前导模糊查询不能使用索引select*fromorderwheredesclike‘%XX’而非前导模糊......
  • ☀️Navicat连接Oracle:'ORA-12638: Credential retrieval failed' 解决办法
    前言:我们在使用Navicat连接Oracle数据库的时候,需要oci.dll动态链接库,Navicat16在安装时候已经自带了。我在之前使用一直好好的,就今天需要连一个新项目的Oracle,报错了:ORA-12638:Credentialretrievalfailed',如下:解决:通过同事口中得知,要连接的Oracle版本是:12c(12.2.0.1.0),而......
  • 使用python监控HDFS文件的增量【优化中】
    1.目录1、需求和步骤2、项目结构3、项目代码    3.1建表语句hdfs_Ctreate_table    3.2删除文件记录hdfs_delete_file_record.py    3.3文件路径的小时监控hdfs_path_Monitor.py    3.4文件路径的天监控hdfs_path_Monitor_day.py    3.5文......
  • 从原理聊JVM(五):JVM的编译过程和优化手段 | 京东云技术团队
    一、前端编译前端编译就是将Java源码文件编译成Class文件的过程,编译过程分为4步:1准备初始化插入式注解处理器(AnnotationProcessingTool)。2解析与填充符号表将源代码的字符流转变为标记(Token)集合,构造出抽象语法树(AST)。抽象语法树每个节点都代表着程序代码中的一个语法结构,包含包......
  • Oracle表空间与表空间文件
    表空间在Oracle中,表空间(Tablespace)是一个逻辑的概念,用来组织和存储数据库中的物理数据。而表空间文件(TablespaceFile)是实际存储数据的物理文件。一个表空间可以包含一个或多个表空间文件,表空间文件通常保存在操作系统的文件系统中。当创建数据库时,管理员可以指定表空间的名称和......
  • Oracle数据库表空间和角色/用户 权限
    问题1.https://blog.csdn.net/weixin_42446705/article/details/1163377112.https://blog.csdn.net/wanghai__/article/details/47918793.https://www.iteye.com/blog/czmmiao-1304934这个特别好4.https://www.cnblogs.com/abeam/p/13439120.html5.https://blog.csdn.net/l......
  • oracle数据库中插入特殊符号'&'
    在plsql里边执行:updateuserinfosetpageurl='myjsp?page=1&pagesize=10'whereid='test'这条sql语句往数据库的pageurl字段放进去了一个url地址,但是执行的时候却并非那么理想,因为这其中有一个oracle的特殊字符,需要进行转义,那就是字符'&'.怎么处理上例中的特殊字符?两个办法:  ......
  • 理解ORACLE数据库字符集
    一.引言   ORACLE数据库字符集,即Oracle全球化支持(GlobalizationSupport),或即国家语言支持(NLS)其作用是用本国语言和格式来存储、处理和检索数据。利用全球化支持,ORACLE为用户提供自己熟悉的数据库母语环境,诸如日期格式、数字格式和存储序列等。Oracle可以支持多种语言及字符集,......
  • JVM 内存大对象监控和优化实践
    作者:vivo互联网服务器团队-LiuZhen、YeWenhao服务器内存问题是影响应用程序性能和稳定性的重要因素之一,需要及时排查和优化。本文介绍了某核心服务内存问题排查与解决过程。首先在JVM与大对象优化上进行了有效的实践,其次在故障转移与大对象监控上提出了可靠的落地方案。最后,总......
  • SQL 优化 (总)
    一、SQL语句1、Select:尽量不用Select星号语句,因为Select星号会全表扫描,导致sql语句性能大大降低。使用具体的列代替星号,避免多余的列2、Where:(1) where条件避免前面加函数和操作(2)避免在where子句中使用!=或<>操作符,否则将引擎放弃索引进行全表扫描3、Like:like避免开头%......