sql 语句中对like 的优化

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

 

1、尽量不要使用 like '%..%'
2、对于 like '..%..' (不以 % 开头),Oracle可以应用 colunm上的index
3、对于 like '%...' 的 (不以 % 结尾),可以利用 reverse + function index 的形式,变化成 like '..%' 代码

建测试表和Index。
注意:重点在于带reverse的function index。同时,一定要使用CBO才行......

SQL> select reverse('123') from dual;
REVERSE('123')
--------------------------------
321
1 row selected.

SQL> create table test_like as select object_id,object_name from dba_objects;
Table created.

SQL> create index test_like__name on test_like(object_name);
Index created.

SQL> create index test_like__name_reverse on test_like(reverse(object_name));
Index created.

SQL> analyze table test_like compute statistics for table for all indexes;
Table analyzed.

SQL> set autot trace

--常量开头的like , 会利用index ,没问题......
SQL> 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)

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

SQL> 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的
SQL> 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了'
SQL> 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)
SQL高级技巧与策略:深入LIKE语句、函数运用与异常处理 本博客深入探讨了SQL中的LIKE语句,包括其语法和用法,以及如何利用通配符进行模式匹配。同时,介绍了SQL中的基本函数如COUNT、AVG、ROUND、SUM、MAX和MIN的使用方法。此外,还详细讨论了SQL中的错误处理、异常管理以及性能优化技术,为中级开发者提供了深入理解和运用SQL高级技术的宝贵信息。... 阅读详情

相关推荐

SQL大量数据查询的优化及非用like不可时的处理方案

主要介绍了SQL大量数据查询的优化及非用like不可时的处理方案,需要的朋友可以参考下

SQL优化速度,关于like

SQL优化速度,关于like

xinning1002的博客 5128

嵌入式系统中的轻量级压缩实践——miniLZO在STM32上的性能优化

本文深入探讨了miniLZO轻量级压缩算法在STM32嵌入式系统中的性能优化实践。通过对比无损压缩算法的性能特点,详细解析了miniLZO在内存占用、压缩速度方面的优势,并提供了STM32移植、参数调优及创新应用案例,帮助开发者在资源受限环境中实现高效数据压缩。

weixin_30776273的博客 64

Oracle SQL 语句中对Like优化

[color=red][color=red]1、尽量不要使用 like '%..%' 2、对于 like '..%..' (不以 % 开头),Oracle可以应用 colunm上的index 3、对于 like '%...' 的 (不以 % 结尾),可以利用 reverse + function index 的形式,变化成 like '..%' 代码[/color][/color] 建...

java-admin 522

eclipse的servlet默认不执行index_男朋友连模糊匹配like %%怎么优化都不知道

三歪最近发现我一直在写MySQL的文章,然后就跟我说他有sql用到like的时候就没办法用到索引了,问我怎么办。我让他坐在我腿上,摸着他的手说道:傻瓜,这样这样,你看这不是好了?顺手刮了一下他的鼻子。三歪小脸一红,说:你真讨厌,然后娇羞的走了。玩笑归玩笑哈,其实在开发过程中,经常会碰到一些业务场景,需要以完全模糊匹配的方式查找数据,就会想到用 like %xxx% 或者 like %xx...

weixin_39947501的博客 393

SQL优化的15个小技巧,纯干货分享!

普通索引最基本的索引,没有任何限制唯一索引与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值主索引即主键索引,关键字PRIMARY复合索引为了更多的提高MySQL效率可建立组合索引,遵循“最左前缀”原则全文索引可用于MyISAM表,MySQL5.6之后也可用于innodb表,用于在一篇文章中,检索文本信息的, 针对较大的数据,生成全文索引很耗时和空间以上就是目前我对SQL优化的一些个人理解和总结,如果遗漏,欢迎评论区补充说明!

黄团团的个人博客 2万+

Like SQL语句优化

Like SQL语句优化 Like SQL语句优化的一个小测试 1.尽量不要使用 like '%..%' 2.对于 like '..%..' (不以 % 开头),Oracle可以应用 colunm上的index 3.对于 like '%...' 的 (不以 % 结尾),可以利用reverse + function index 的形式,变化成 like '..%'

maoweiting19910402的专栏 1万+

SQL语句优化like优化+性能优化

常量开头的like , 会利用index ,没问题 SQL> select * from test_like where object_name like AS%'; 开头和结尾都是%,对不起,很难优化 SQL> select * from test_like where object_name like '%%'; 以常量结束,直接写的时候是不能应用index的 SQL> select * from test_like where object_name like '.

东城庞太师 7144

sql like 多个条件_都9012年啦,不懂得这些SQL语句优化,你是要吃大亏的

引言 数据库的性能优化技术一直是个老生常谈的问题,不管是MySQLSQL Server还是Oracle。对于我们IT开发人员和运维人员,掌握常用的SQL 优化语句是非常必要的,它可以使你的工作变得“事半功倍”,会为你带来很多便利和节约很多时间。接下来,我将带领你们认识以下的常用优化语句。 1. SQL语句要一致,避免出现大小写如果让你看上面两条SQL语句,你是不是觉得它们是一样的?但是对于数据...

weixin_39780962的博客 1236

一条 like 条件的慢 SQL 语句优化

作者:jiyf 原文来源: https://tidb.net/blog/d4593315 ...

TiDB 社区干货传送门 310

oracle数据库like语句优化,Like SQL语句优化

Like SQL语句优化的一个小测试1.尽量不要使用 like '%..%'2.对于 like '..%..' (不以 % 开头),Oracle可以应用 colunm上的index3.对于 like '%...' 的 (不以 % 结尾),可以利用reverse + function index 的形式,变化成 like '..%'具体的测试流程: (测试工具:PLSQL Developer)[1...

weixin_29124947的博客 650

like语句太慢 sqlserver_SQL Server优化50法

虽然查询速度慢的原因很多,但是如果通过一定的优化,也可以使查询问题得到一定程度的解决。  查询速度慢的原因很多,常见如下几种:[li]没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) [/li][li]I/O吞吐量小,形成了瓶颈效应。 [/li][li]没有创建计算列导致查询不优化。 [/li][li]内存不足 [/li][li]网络速度慢 [/li][li]查询出的数据量过大...

weixin_39650994的博客 1516

sql语句查询,多字段like模糊查询优化

1、多字段like模糊查询优化: 最常见的写法:where  a like '%xx%' or b like '%xx%' or c like '%xx%';  这种写法查询效率低,经过调查,下面的方法可以替代,并且效率高: 1、如果like的关键字相同: where instr(nvl(a, '')||nvl(b,'')||nvl(c,''),   'xx') > 0 把要模糊查询的字段

zjp的专栏 4万+

Oracle SQL 语句中对Like优化(引用reverse函数)

重点关注reverse用法:reverse(字段)like reverse(属性值);实际例子体现出得查询效率:            select Max(Ana_Rqb_Date) from Ana_Rqb where ana_rqb_org_id like 00%;            --25s            select Max(Ana_Rqb_Date

爱肯的专栏 1235

SQL 语句中对于like 的调优

SQL> create table test as select * from dba_objects;表已创建。SQL> select owner,object_name from test where owner like ROBINSON%;OWNER                                                        OBJECT_

落落的专栏 专注SQL调优 性能调优 1万+

SQL语句 SELECT LIKE like用法详解

 LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。   假设有一个数据库中有个表table1,在table1中有两个字段,分别是name和sex二者全是字符型数据。现在我们要在姓名字段中查询以“张”字开头的记录,语句如下:    select * from tabl

aaaaatiger--寻路 1755

sqllike怎么使用索引?

转自:http://zhidao.baidu.com/link?url=6r3FAC798sKfAD4fJ5k7lD1XQBC3IYvH-pabXUMJy0nmM_ZSzTcSR-s3M58EjJoIw8oaOC-rUSD-DIIMnZKzZAJWIhjTYobEejwu0_o526e like 要是使用索引 就必须这样写 like ‘a%’ 或者 ‘%a’,两边都加上是不会触发索引的。

看不过的黑工坊 6220
上一篇: SQL中Like的一般用法
下一篇: Asp.Net日期时间格式设置
langzi588
博客等级 码龄16年 14粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值