oracle提高like速度,oracle中like如何优化?

简单说两句,具体看例子

1。尽量不要使用 like '%%'

2。对于 like '%' (不以 % 开头),Oracle可以应用 colunm上的index

3。对于 like '%…' 的 (不以 % 结尾),可以利用reverse + function index 的形式,变化成 like '%'

代码:

-- '建测试表和Index,注意,重点在于带reverse的function index。

同时,一定要使用CBO才行……

sys@mescp> select reverse('123') from dual;REVERSE('123')

--------------------------------

321

1 row selected。

sys@mescp> create table test_like as select object_id,object_name from dba_objects;

Table created。

sys@mescp> create index test_like__name on test_like(object_name);

Index created。

sys@mescp> create index test_like__name_reverse on test_like(reverse(object_name));

Index created。

sys@mescp> analyze table test_like compute statistics for table for all indexes;

Table analyzed。

sys@mescp> set autotrace trace exp

-- '常量开头的like , 会利用index ,没问题…… '

sys@mescp> select * from test_like where object_name like AS%';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=655 Bytes=15720)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST_LIKE' (Cost=2 Card=655Bytes=15720)

2 1 INDEX (RANGE SCAN) OF 'TEST_LIKE__NAME' (NON-UNIQUE) (Cost=2 Card=118)

--'开头和结尾都是 % ,对不起,很难优化'

sys@mescp> select * from test_like where object_name like '%%';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=655 Bytes=15720)

1 0 TABLE ACCESS (FULL) OF 'TEST_LIKE' (Cost=6 Card=655 ytes=15720)

-- '以常量结束,直接写的时候是不能应用index的'

sys@mescp> select * from test_like where object_name like '%S';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=655 Bytes=15720)

1 0 TABLE ACCESS (FULL) OF 'TEST_LIKE' (Cost=6 Card=655 Bytes=15720)

--'以常量结束的,加个reverse 函数,又可以用上index了'

sys@mescp> select * from test_like where reverse(object_name)like reverse('%AS');

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=655 Bytes=15720)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST_LIKE' (Cost=2 Card=655 Bytes=15720)

2 1 INDEX (RANGE SCAN) OF 'TEST_LIKE__NAME_REVERSE' (NON-UNIQUE) (Cost=2 Card=118)。

全部

手把手教你用STM32CubeMX配置I3C通信(含动态地址分配实战) 本文提供了一份基于STM32CubeMX配置I3C通信的实战指南,重点讲解了动态地址分配的实现步骤。通过详细的工程配置、从设备枚举、CCC命令使用及数据读写示例,帮助开发者快速掌握这一高效通信协议,以替代传统的I2C或SPI接口,满足多传感器连接与低功耗设计需求。 阅读详情

相关推荐

2 海康视觉平台VisionMaster 上手系列:大纲及准备

海康视觉平台VisionMaster 大纲,课前准备 快速入门 工业机器视觉 机器视觉

HuangGong2022的博客 1万+

ORACLE 使用 LIKE 模糊查询效率

ORACLE 使用 LIKE 模糊查询效率慢   原因: 1、使用 LIKE 模糊查询效率慢会索引失效从而引起全表扫描。   解决方法: 1、将like '%%' 改成 ‘% ' 或 ’%‘. 2、使用Oracle内部函数:INSTR()。 如: SELECT S_PORT_ID,S_MOI_NAME,S_NATIVE_NE_NAME,S_PORT_NO,S_REMARK FRO...

不甘于平凡的溃败的博客 9453

基于STM32L4XX 、HAL库的STSPIN32G4三相无刷直流电机(BLDC)驱动应用C语言程序设计

/ 设置PWM模式为6步换相。│PA5-7 ├── SPI ────►│SCK/MISO│ │ 三相桥 │。– 2路电机控制高级定时器(16位,支持6路 PWM 通道)// 60度电气周期对应转速 = 60/(极对数 * 6 * 周期)// 电气角度(0-3599)

PP_Cottage的博客 121

Oracle like 优化

(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表

随便记记 3812

oracle like执行效率低用什么方法_[O记]Oracle并行执行面面观

并行的概念 Oracle并行执行的本质是以额外的硬件资源消耗来换取更短的执行时间,一种以空间换取时间的做法。所谓的并行有上述两种模式,各有优缺点,但是Oracle的并行虽然采用的是Shared Everything架构,其实上可以达到其他Shared Nothing的效率,又可以避免Shared Nothing架构所带来的固有的预先分区,并行度固定的问题。Oracle并行的...

weixin_39613824的博客 314

oracleclob大字段查询优化

oracleclob大字段模糊查询很慢,亲测通过以下方法加全文索引会明显提高查询速度: 1,对于要查询的clob字段使用以下语句创建全文索引 CREATE INDEX 自定义索引名 ON 表名(列名) INDEXTYPE is CTXSYS.CONTEXT; 2.查询的时候对于clob字段使用如下函数,不要使用like select * from 表名 where contains(列名,'XXXXX')>0 order by id desc 可以对比like '%XXXXX%'会发现查...

紫乾2014的博客 5289

oracle提高like速度,sql语句提升like效率

众所周知,like字符串匹配时存在%a会使索引时效,所以应避免出现,如果真的无法避免,则用以下方法:Oracle1、使用select * from t where instr(name,'a')>0; 来代替select * from t where name like '%a%'; 虽然有所提升,但是还是不快(曾经有人说使用contains,我尝试后结果得不到想要的结果集,我就放弃了,...

weixin_42297519的博客 1898

oracle中regexp_like 的使用

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

qq_14920585的博客 3318

优化Oracle数据库性能:LIKE操作的优化

Oracle 数据库中,LIKE 操作是一种常用的模糊匹配方式,用于在字符串中查找符合指定模式的数据。然而,当处理大量数据时,使用 LIKE 操作可能导致查询性能下降。为了提高数据库的效率,本文将重点介绍如何优化使用 LIKE 操作的查询。 索引前缀搜索是一种优化 LIKE 操作的方法,通过使用索引的前缀匹配来提高查询性能。下面我们将详细介绍如何使用索引前缀搜索来优化 LIKE 操作。

小蓝枣的博客 4196

ORACLE模糊查询优化浅谈

模糊查询是数据库查询中经常用到的,一般常用的格式如下: (1)字段  like '%关键字%'   字段包含"关键字“的记录   即使在目标字段建立索引也不会走索引,速度最慢   (2)字段  like '关键字%'      字段以"关键字"开始的记录   可以使用到在目标字段建立的升序索引 (3)字段 like '%关键字'      字段以"关键字“结束的记录

你只管努力, 7624

oracle的替代品,转--oracle中替代LIKE方法

Oracle中替换like的方法关键词:数据库中存储了海量的数据,当查询时使用like速度明显变慢。我在做项目时,发现可以使用instr函数来取代like的作用。1.%a%方式:select * from pub_yh_bm twhere instr(t.chr_bmdm,'2')>0等份于:select * from pub_yh_bm twhere t.chr_bmdm like '%...

weixin_29423089的博客 772

Oracle like '%...%' 优化

Oracle like '%...%' 优化 1。尽量不要使用 like '%%' 2。对于 like '%' (不以 % 开头),Oracle可以应用 colunm上的index 3。对于 like '%…' 的 (不以 % 结尾),可以利用reverse + function index 的形式,变化成 like '%' 4.非用like'%%'不可时,使用Oracle内部函数:...

xuefengJ的专栏 1347

百万数据Oracle SQL优化

Oracle Order by 语句的优化 1 大家都知道sql中使用 Order by 会导致全表扫描,但是有的功能需求中少不了要使用。数据量少还好说,数据量一大就会变的特别的慢 使用Order by的执行计划 未使用Order by的执行计划 可以看出未使用Order by的sql 是使用了Order by 的近10倍 如何提高Order by使用的效率(如图) 在使用的Order by 的字段中添加索引(注意Order by 字段的索引必须配合where使用才有效) Oracle like

weixin_46323376的博客 1957

利用reverse索引优化like语句的方法

我们在 Oracle中使用like查询时,如果是后like(like '111%'),是可以使用索引的,但前like(like '%111')时。不会正常去走字段的索引。 建议使用 reverse索引的形式进行优化,首先优化索引: createindex索引名on表名(reverse(字段名)); 然后使用时 select A.XXX FROM表名 A WHEREreverse(字段名) likereverse('%123'); 调整后可以通过执行计划可以发现,在...

pjcwp的博客 710

oracle like使用索引,oracle like 上强制使用索引

当where子句对某一列使用函数时,除非利用这个简单的技术强制索引,否则Oracle优化器不能在查询中使用索引。通常情况下,如果在WHERE子句中不使用诸如UPPER、REPLACE 或SUBSTRD等函数,就不能对指定列建立特定的条件。但如果使用了这些函数,则会出现一个问题:这些函数会阻碍Oracle优化器对列使用索引,因而与采用索引的情况相比较,查询会花费更多的时间。庆幸的是,如果在使用函数的...

weixin_36296444的博客 860

Oraclelike效率正则表达式浅析

Oraclelike常用但是其效率不是高。 特别是使用%a%-----》全局扫描,没有利用到任何索引。 情况可以的条件尽量下使用a%------》可以利用正序的索引。 ...

252

oracle模糊查询效率提高

分2种思路考虑模糊查询的效率提高。--注:专注处理百万级数据量,小量数据就算了 第一种:把数据存到业务内存中,通过查询内存提高效率。(要求:硬件内存要高) 1,如果想实现内存动态数据,可以监控表数据变化更新内存。   第二种:提高oracle数据库的查询方式。 1、使用两边加‘%’号的查询,oracle是不通过索引的,所以查询效率很低。     例如:select count(...

小小步 961

sql 语句用substr 不用 like 可以提升查询效率

在大多数SQL实现里都有获取字符串子串的函数。但名称可能略有不同,比如Oracle和。对于这个函数来说,这两个实现之间的惟一差别就是函数的名称。用这个like关键字。

qq_44625745的博客 1204

oracle强制索引 多列,Oracle数据库强制索引(2)

GE SCAN ADDRESS_ITABLE ACCESS BY INDEX ROWID ADDRESSINDEX RANGE SCAN ADDRESS_ITABLE ACCESS BY INDEX ROWID ADDRESSINDEX RANGE SCAN ADDRESS_ITABLE ACCESS BY INDEX ROWID ADDRESSINDEX RANGE SCAN ADDRESS_I...

weixin_35788791的博客 1170

ZT: 提高SQL性能的措施

提高SQL性能的措施! 最后出处:http://www.ourasp.net/ 作者:石骁騑 收录于:2001年12月19日 一、问题的提出在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方

foreveryday007's BLOG 1888

oracle模糊查询效率可这样提高

1、使用两边加‘%’号的查询,oracle是不通过索引的,所以查询效率很低。     例如:select count(*) from lui_user_base t where t.user_name like '%cs%'; 2、like '...%'和 like'%...'虽然走了索引,但是效率依然很低。 3、有人说使用如下sql,他的效率提高了10倍,但是数据量小的时候

日拱一卒无有尽,功不唐捐终入海 923
上一篇: 标签存入数据库php,如何使用MySQL和PHP在数据库中存储标签?
下一篇: swoole怎么加速php,LaravelS通过Swoole加速Laravel/Lumen详解
无知的坚强
博客等级 码龄8年 32粉丝 2074原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值