SQL优化: 匹配中间字段内容的一种写法
2022/2/23 19:22:13
本文主要是介绍SQL优化: 匹配中间字段内容的一种写法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
众所周知,当索引字段使用like时,只有前缀查找才会走索引,但难免有时候需要匹配字符串中间部分内容,如果这个时候,选择字段只有索引字段,会走索引,例如:
例: select tob.object_name from test_objects tob
where tob.object_name like '%EFGHI%';
注: object_name 有索引
SELECT STATEMENT, GOAL = ALL_ROWS 105 2745 107055 INDEX FAST FULL SCAN LOTPYTHON IND_TEST_OBJECTS001 105 2745 107055
但如果选择内容包含非索引字段时,是不会走索引的。
例:select tob.object_name,tob.object_id from test_objects tob
where tob.object_name like '%EFGHI%'
注: object_name 有索引
SELECT STATEMENT, GOAL = ALL_ROWS 307 2745 120780 TABLE ACCESS FULL LOTPYTHON TEST_OBJECTS 307 2745 120780
那有没有好的办法呢,其实还是可以通过某种写法规避的。
例如:with test_like as (select object_name from test_objects
where object_name like '%EFGHI%'
union all
select '不可能出现的词' as object_name from dual
)
select tob.object_name,tob.object_id from test_objects tob
where tob.object_name in (select * from test_like);
SELECT STATEMENT, GOAL = ALL_ROWS 112 1 110 HASH JOIN 112 1 110 NESTED LOOPS 112 1 110 NESTED LOOPS 112 1 110 STATISTICS COLLECTOR VIEW SYS VW_NSO_1 108 2746 181236 HASH UNIQUE 1 181236 VIEW LOTPYTHON 108 2746 181236 UNION-ALL INDEX FAST FULL SCAN LOTPYTHON IND_TEST_OBJECTS001 105 2745 107055 FAST DUAL 2 1 INDEX RANGE SCAN LOTPYTHON IND_TEST_OBJECTS001 2 1 TABLE ACCESS BY INDEX ROWID LOTPYTHON TEST_OBJECTS 3 1 44 TABLE ACCESS FULL LOTPYTHON TEST_OBJECTS 3 1 44
该写法有一个限制条件,就是查询返回的数据量不是很大,当然,数据量返回很大的时候,也不应该走索引。
这篇关于SQL优化: 匹配中间字段内容的一种写法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API