通配符(%)在搜寻词首出现,一般会导致Oracle系统不使用索引。因此,要尽量避免在模糊查询中使用通配符开头,或者是开头结尾都有通配符,这样会导致降低查询速度。
--创建一个name字段的索引
create index IDX_B$L_INTEREST_INFO_NAME on B$L_INTEREST_INFO (NAME);
以下语句不能使用name字段索引:
select * from b$l_interest_info where name like '%瑞德工业园%';
2 ----------------------------------------------------------------------------
3 | Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
4 ----------------------------------------------------------------------------
5 | 0 | SELECT STATEMENT | | 141K| 8139K| 5426 (4)|
6 | 1 | TABLE ACCESS FULL| B$L_INTEREST_INFO | 141K| 8139K| 5426 (4)|
7 ----------------------------------------------------------------------------
如果遇到模糊查询的例子,尽量将通配符放在末尾,以常量开头,那么可以使用上索引,如下语句所示:
select * from b$l_interest_info where name like '瑞德工业园%';
2 -----------------------------------------------------------------------------------------------
3 | Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
4 -----------------------------------------------------------------------------------------------
5 | 0 | SELECT STATEMENT | | 1278 | 75402 | 360 (1)|
6 | 1 | TABLE ACCESS BY INDEX ROWID| B$L_INTEREST_INFO | 1278 | 75402 | 360 (1)|
7 | 2 | INDEX RANGE SCAN | IDX_B$L_INTEREST_INFO_NAME | 1278 | | 6 (0)|
8 -----------------------------------------------------------------------------------------------
如果必须将通配符放在开头,以常量结束,那么可以创建一个反向键索引
--在name字段创建一个反向键索引
create index idx_interest_info_name_re on b$l_interest_info(reverse(name));
analyze table b$l_interest_info compute statistics for table for all indexes;
--没有用到反向键索引
select * from b$l_interest_info where name like '%瑞德工业园';
2 ----------------------------------------------------------------------------
3 | Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
4 ----------------------------------------------------------------------------
5 | 0 | SELECT STATEMENT | | 141K| 8139K| 5426 (4)|
6 | 1 | TABLE ACCESS FULL| B$L_INTEREST_INFO | 141K| 8139K| 5426 (4)|
7 ----------------------------------------------------------------------------
因此,要使用反向键索引还必须加上reverse关键字
--用上了反向键索引IDX_INTEREST_INFO_NAME_RE
select * from b$l_interest_info where reverse(name) like reverse('%瑞德工业园');
2 ----------------------------------------------------------------------------------------------
3 | Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
4 ----------------------------------------------------------------------------------------------
5 | 0 | SELECT STATEMENT | | 141K| 8139K| 5233 (1)|
6 | 1 | TABLE ACCESS BY INDEX ROWID| B$L_INTEREST_INFO | 141K| 8139K| 5233 (1)|
7 | 2 | INDEX RANGE SCAN | IDX_INTEREST_INFO_NAME_RE | 25429 | | 77 (2)|
8 ----------------------------------------------------------------------------------------------
如果开头结尾都要用到通配符,且select获取的字段只有该模糊查询字段,则可以用上索引:
--用到了name字段的一般索引IDX_B$L_INTEREST_INFO_NAME
select name from b$l_interest_info where name like '%瑞德工业园%';
2 ----------------------------------------------------------------------------------------
3 | Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
4 ----------------------------------------------------------------------------------------
5 | 0 | SELECT STATEMENT | | 141K| 1379K| 1915 (7)|
6 | 1 | INDEX FAST FULL SCAN| IDX_B$L_INTEREST_INFO_NAME | 141K| 1379K| 1915 (7)|
7 ----------------------------------------------------------------------------------------
但是对于使用%%这种查询且select获取的字段包含了模糊查询字段以外的,就很难用上索引了。
相关推荐
前言 一直以来,对于搜索时模糊匹配...然后搜个简单的模糊匹配条件如 LIKE “血常规%”,可以发现查询计划生成如下,索引并没有被使用上,这是因为传统的btree索引并不支持模糊匹配 查阅文档后发现,pgsql可以在Btree
相应描述mysql使用的sql命令,包括模糊查询和索引,函数等等 平常会使用到的sql都会有
但是在实际应用中 , 用户的查询输入与检索系统数 据库的构建都不可能完全正确 用户对于搜索主 题所处的领域不了解 , 采用不合适的查询词 , 会导致 查询词的覆盖范围大大缩小 在中文信息检索系 统中 , 用户还常会输入...
Redis 的查询、二级索引和全文搜索 RediSearch 是一个Redis 模块,为 Redis 提供查询、二级索引和全文搜索。...RediSearch 索引通过提供精确短语匹配、模糊搜索和数字过滤以及许多其他功能来增强 Redis。
该模型以一维指纹为资源信息的键,实现了支持多关键字查询、语义查询的模糊匹配功能,并利用逆向指纹、逆向finger表项以及特有的预判断过程,提高了系统查询效率,使系统中的查询负载趋于平衡。实验结果表明,O-...
使用场景: 1. 要求LIKE '%xxx%'模糊查询支持索引,提高数据检索速度 2. 在上一场景的基础上,实现了对多个OR条件语句的索引查询支持
1、常见用法: (1)搭配%使用 %代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据: ...当查询的的条件和查询的结果都是索引中的字段的时候,这个索引我们可以称之为覆盖索引,这个时候,使用like模糊
本项目提供一个简单索引构建工具,使用注解即可实现索引自动创建与搜索,而不需要你手写该过程, 避免项目中大量使用like或者其他效率低的搜索机制,相比于ES(专业搜索引擎),这是一种轻量级的实现方式 特点: ...
3.3 模糊查询时(like语句),模糊匹配的占位符位于条件的首部 3.4 索引列参使用了函数 3.5 参数类型与字段类型不匹配,导致类型发生了隐式转换,索引失效 3.6 查询条件使用or关键字,其中一个字段没有创建索引,则...
易语言模糊搜索源码,模糊搜索,控件初始化,编辑框事件_字符改变_模糊搜索
java1.5环境下创建修改删除增加模糊查询索引文件包 使用Lucene3.01+IKAnalyzer3.2 范例java文件,有兴趣的可以看看 欢迎指教
问题:明明建立了索引,为何Like模糊查询速度还是特别慢? Like是否使用索引? 1、like %keyword 索引失效,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描。 ...
RediSearch索引通过提供精确短语匹配,模糊搜索和数字过滤以及许多其他功能来增强Redis。 入门 如果您刚刚开始使用RediSearch,请查看。 另外,请考虑查看我们的。 使用RediSearch进行启动和运行的最快方法是使用...
例如,如果您需要进行模糊查询,全文索引可能比B树索引更适合。如果您需要进行精确匹配,B树索引可能更好。在选择索引类型时,请考虑查询类型和数据类型,以确定最佳索引类型。 除了选择正确的索引类型之外,还应该...
在本篇文章里小编给大家分享的是一篇关于MySQL模糊查询语句整理内容,有兴趣的朋友们可以学习下。
提高sql server xml字段的查询速度的几种方法,其中使用索引关键字方法在模糊查询中相当实用。
indexType为索引的类型,keyword表示精确匹配,text表示模糊匹配,建索引时会进行分词; 2 索引服务查询接口 keyWord:查询关键字 pageNum:第几页; pageSize:每页条数; indexName:待查索引集合名称 bbox:...
该文档详述如何创建全文索引优化模糊查询,使用全文索引的填充因子避免漏查多查
本文实例为大家分享了vue实现Input输入框模糊查询方法的具体代码,供大家参考,具体内容如下 原理:原生js的indexOf() 方法,该方法将从头到尾地检索数组,看它是否含有对应的元素。开始检索的位置在数组 start 处或...