模糊查询%在最前面,能否或者怎么使用索引

PostgreSQL模糊查询索引的使用 对于只有前模糊(%abc)的查询需求,使用collate "C"的reverse()表达式的b-tree索引;bill=# explain (analyze,verbose,timing,costs,buffers) select * from test001 where c1 like '%中国%';bill=# explain (analyze,verbose,timing,costs,buffers) select * from test001 where c1 like '%我是程序员%'; 阅读详情

前言

众所周知,在索引时,如果模糊查询的%置于最前面,索引会失效。但是在%前置时,什么情况下会使用到索引?

补充

like %keyword 索引失效,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描。
like keyword% 索引有效。
like %keyword% 索引失效,也无法使用反向索引。

解决

方式一

反转模糊查询的字段,但是注意,对于"%keywork%"的索引,此方法是无效的。

select * from company where companyName like '%江南皮革长';

我们可以改造为:

select * from company where reverse(companyName) like reverse('%江南皮革长');

方式二

首先我们有TEST_USER表:

CREATE TABLE `USER` (
  `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `NAME` varchar(64) DEFAULT NULL COMMENT '名字',
  `MOBILE` varchar(11) DEFAULT NULL COMMENT '手机号',
  PRIMARY KEY (`ID`),
  KEY `INDEX_MOBILE` (`MOBILE`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试的用户表';

1.只查询索引
EXPLAIN SELECT
	MOBILE
FROM
	USER
WHERE
	MOBILELIKE '%151'

图片.png
Extra:Using index. (走索引)

2.查索引字段和主键
EXPLAIN SELECT
	ID,MOBILE
FROM
	USER
WHERE
	MOBILE LIKE '%151'

图片.png

Extra:Using index. (走索引)

3.查非索引字段
EXPLAIN SELECT
	MOBILE,NAME
FROM
	USER
WHERE
	MOBILE LIKE '%151'

图片.png
Extra:Using where. (不走索引)

4.where后面多条件
4.1where后跟普通条件
EXPLAIN SELECT
	MOBILE
FROM
	USER
WHERE
	NAME = '江南皮革厂'
AND MOBILE LIKE '%151'

图片.png
Extra:Using where. (不走索引)

4.2where后跟主键
EXPLAIN SELECT
	MOBILE
FROM
	USER
WHERE
	ID >1
AND MOBILE LIKE '%151'

图片.png
Extra:Using index. (走索引)

总结

like查询百分号前置,并不是100%不会走索引。
如果只select索引字段,或者select索引字段和主键,也会走索引的。
如果where条件中有主键时,走索引。

一句话:在select和where中存在除了索引和主键外的其他条件或字段时,不走索引。

个人博客
腾讯云社区
掘金
优快云
简书
GitHub
码云
OSCHINA
Segmentfault
公众号:wx.jpg

百度地图小区边界爬取 百度地图 小区边界爬取 完整项目地址-github 数据源:百度地图api 项目结构 RESIDENTIALAREABOUNDARY │ ResidentialAreaBoundaryControl.py 主函数 │ ResidentialAreaBoundaryFunc.py 方法库 │ ├─Auxiliary │ crawelFunc.p... 阅读详情

相关推荐

从像素到光影:解析《黑神话:悟空》中Nanite与Lumen的协同渲染革命

本文深度解析了《黑神话:悟空》如何利用Unreal Engine 5的Nanite与Lumen技术实现渲染革命。Nanite处理亿级多边形几何细节,无需传统LOD优化;Lumen提供全动态全局光照,实现实时光线反弹。两者协同工作,为游戏带来电影级视觉体验,重塑了实时渲染的技术标准与工作流程。

f6g7h8i9j的博客 425

MYSQL like模糊查询,%在前面索引为什么会失效 (最左前缀底层原理)

2

个人主页 7473

Halcon形状模板匹配实战:inspect_shape_model参数优化指南

本文深入解析Halcon形状模板匹配中inspect_shape_model参数的优化技巧,涵盖NumLevels和Contrast参数的实战应用。通过具体案例展示如何平衡匹配速度与精度,帮助开发者高效调试形状模型,提升工业视觉检测的准确性和效率。

weixin_30342209的博客 618

SQL中用到LIKE模糊检索的几种优化场景

SQL开发中经常会碰到使用LIKE模糊检索的场景,'%'的位置,可能影响索引的正常使用,看到刘老师公众号的一篇文章,介绍了相关场景的改造策略,非常受用,推荐阅读。测试表t1,object_...

bisal的专栏 2820

《大明王朝1566》中,朝廷财政危机无法解决的根源分析

财政困局中的财富最终流向三重黑洞:​皇室挥霍​(如嘉靖炼丹修殿)、特权阶层贪腐​(严党年入百万两盐税)、制度性损耗​(宗室供养、低效官僚)。更深层的“钱”其实是被禁锢在道德化治理的牢笼中——当国家用“黄河长江皆可为用”的权术思维替代制度性改革时,财政危机便成为帝制王朝无法逃脱的宿命。

为了小家奋斗 1972

【CV论文精读】【协同感知综述】Collaborative Perception for Autonomous Driving :Current Status and Future Trend

感知是自动驾驶系统的关键模块之一,近年来取得了很大进展。然而,单个车辆的有限能力导致感知性能提高的瓶颈。为了突破个体感知的局限,协作感知被提出,它使车辆能够共享信息来感知视线和视野之外的环境。本文综述了有前途的协作感知技术的相关工作,包括介绍了基本概念,概括了协作模式,总结了协作感知的关键要素和应用。最后,我们讨论了这一研究领域面临的挑战和问题,并给出了一些潜在的进一步方向。

weixin_44184852的博客 4690

模糊查询like:百分号的使用及注意事项

普通的百分号赋值使用: print("%s" % "ann") 假如我们想在前面加个百分号: print("%%s" % "ann") 运行后提示错误: TypeError: not all arguments converted during string formatting 这是转义的错误,如果我们想显示第一个百分号,就要使用两个百分号: print("%%%s" % "ann") 同理,如果我们想在首尾均加上百分号,就要写四个百分号: print("%%%s%%" % "ann") pyt

ayangann915的博客 4101

Win10环境借助DockerDesktop部署Open web UI集成DeepSeek

Win10环境借助DockerDesktop部署Open web UI集成DeepSeek,并借助DuckDuckGo实现联网查询

虎鲸不是鱼 1700

SQL优化之避免索引失效原则

避免索引失效的一些原则 索引使用原则 不要跨列或者无序使用(最佳左前缀原则)-- 复合索引 尽量使用全索引匹配 --复合索引 ####不要在索引上使用任何操作(如:计算、函数、类型转换),否则索引失效。 正常演示 explain select * from book where authorid=1 and typeid=2\G explain select * from book where authorid = 1 and typeid*2 = 2 ;--用到了a1个索引 explain s

shuyoujing的博客 640

SigFit实战:从FEA到光学仿真的热力耦合分析全流程解析

在光机系统与芯片封装等精密工程领域,热与力的耦合效应是影响产品性能与可靠性的核心物理问题。有限元分析(FEA)是预测结构在热、力载荷下变形与应力的基础工具,但其结果通常无法直接用于评估光学性能。这需要一座桥梁,将物理场数据转化为光学设计语言。其核心原理在于数据映射与面形表征技术,例如通过泽尼克多项式拟合,将离散的节点位移分解为离焦、像散等标准光学像差。这项技术的工程价值在于,它实现了多物理场仿真的闭环,使工程师能在设计阶段精准预测热变形或应力对波前误差、调制传递函数等关键光学指标的影响。其典型应用场景包括高

weixin_28630185的博客 340

openharmony之UniProton内核技术揭秘:鸿蒙面向工业控制领域的RTOS设计之道

UniProton是鸿蒙操作系统面向工业控制领域的轻量级实时操作系统(RTOS),专为资源受限的嵌入式设备设计。作为鸿蒙生态的重要组成部分,UniProton提供了高效的实时任务调度、内存管理和IPC机制,满足工业控制场景对实时性和可靠性的严格要求。想象一下,UniProton就像一个超级聪明的管家,管理着电子设备里所有的工作。让你的智能手表既能显示时间,又能接收消息让家里的扫地机器人既能避开障碍物,又能记住哪里已经打扫过了让工厂里的机器人手臂既能精确地抓取东西,又能快速地完成任务实时性强。

m0_67505153的博客 884

【MySQL索引】如何使模糊查询索引不失效,且使得字段两边都能加上%

当我们使用模糊查询的时候对SQL加索引,应该加在字段的右边,而不在字段左边或者两边,因为这样做会导致所以的失效,那么如何能做到加在两边呢? 先上一个例子: 下图是数据库表 CREATE TABLE `tbl_user`( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(20) DEFAULT NULL, `age`INT(11) DEFAULT NULL, `email` VARCHAR(20) DEFAULT NULL, PRIMARY KEY(`

Cocowwy的博客 6681

信捷PLC XD5系列运动控制(10轴)编程应用篇

项目PLC采用XD5-60T10-E,36DI 24DO 晶体管输出,支持10路脉冲输出功能。TMR指令定时器时基可以自己设定,这点比其他品牌PLC方便。ZRN指令我们需要上升沿指令触发。 5、变址寻址 该说不说这个变址寻址是真的强,比西门子指针、三菱的变址寄存器Z 、V都要更加灵活。 7、特殊寄存器:时钟 8、如何建立PLC通讯...............

RXXW_Dor的博客 1万+

MySQL索引系列--索引的优化--LIKE模糊查询

本文介绍MySQL的LIKE模糊查询索引的优化。主要是索引失效的解决方案。

IT利刃出鞘的博客 9806

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ES的模糊查询,在多个索引或者单个索引,全局查询

ES的模糊查询(ES查询),在多个索引或者单个索引,全局查询 官方的简单查询如下图: 可以在new SearchRequest()里的()中加入索引,就会根据下图的代码查询索引下所有数据。 或者可以指定多个索引进行查询: 因为FieldCapabilitiesRequest继承的是SearchRequest,所以只需要直接像FieldCapabilitiesRequest一样把fields()和indices()添加到SearchRequest后面就行了。可以指定多个field和index。 查询某个索

qq_35458371的博客 9047

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

PG中使用索引进行模糊查询

PG中使用索引进行模糊查询 现在数据库中存在一个tb_user(id, name,age)表,并且已经针对name字段创建了索引tb_user_name_idx。 1. 模糊查询没有使用索引 正常情况下,执行如下SQL语句: explain analyze select * from tb_user where name like '%aaa%'; 发现该SQL语句在name字段上使用的是Seq...

海洋之心 3439

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

mysql 模糊查询 like 使用索引状况分析

前言: mysql 创建索引大部分是为了快速查询,但有时候会发现查询语句并没有大多提升,这里面终究是有些故事的。 模糊查询 like 引用索引分析 先直接给个结论,然后我们再分析 select * from table where name like 'jonny%'; select * from table where name like '%jonny%'; 如果 name 字段加了索引,第...

清泉影月 3155

模糊查询的时候避免索引失效

    有时候我们使用模糊查询(like)的时候,会出现索引失效的情况,比如根据手机号码后四位模糊匹配查询。     在MySQL中模糊查询:mobile like ‘%8765’,这种情况是不能使用 mobile 上的索引的,那么如果需要根据手机号码后四位进行模糊查询,可以用一下方法进行改造。     我们可以加入冗余列(MySQL5.7之后加入了虚拟列,使用虚拟列更合适,思路相同),比如 mo...

慕北丶 1万+

索引法则--模糊查询索引失效问题

都是 SELECT *%在左边,即使有索引,也会失效只有当%在右边时,才会生效但问题是,生产环境中,就是要支持模糊查询(%在右边是不够的),一定要两边都是%来查询,这可咋办?

qq_37933128的博客 2123

mysql 模糊查询无法使用索引_MySQL 使用索引提高查询性能

下面所有内容都是以 InnoDB 为例,要说为什么的话,因为咱只用过这个存储引擎。。。什么是索引MySQL 中索引是一种数据结构(InnoDB 是 B+ 树),为了能够更高效的找到想要的数据,从而提高查询的性能而存在。就像字典的目录一样,想要从字典中查找某个 字/词 都可以在目录中根据拼音或部首找到指定的位置。既然索引是以数据结构的形式存在,那么它也必然会占用空间。索引是有序存储在磁盘中的,在添加...

weixin_35713375的博客 536

使用like+%模糊查询,如何才能提高性能?你用对了吗!

点击关注公众号,利用碎片时间学习1、常见用法(1)搭配%使用%代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据:(2)搭配_使用_代表仅仅一个字符的通配符,把上面那条查询语...

Java笔记虾 3466

mysql中%前置模糊查询怎么优化

场景最优方案性能提升幅度固定后缀模糊查询(如%abc反转字段+普通索引10~100倍(视数据量)长文本模糊查询(如文章内容)全文索引5~50倍固定长度后缀匹配(如后3位)预处理后缀+前缀索引10~100倍超大数据量+复杂模糊查询外部搜索引擎(Elasticsearch)100~1000倍通过预处理将无法利用索引的%前置查询,转化为可利用索引的查询,避免全表扫描。实际应用中需结合业务场景和数据量选择最合适的方案。

青鱼入云的博客 1418

MySQL数据库模糊查询什么时候可以使用到索引

正常情况下,当使用模糊查询字段,例如like ”%na“ ,%开头的查询时是没办法使用索引的,但是使用like “kk%” 模糊字段在后面的也是可以使用索引的。 特殊情况:当所需要查询的字段是属于已建的索引时(包括主键索引),那么这时候即使是以%开头的字段,依旧可以使用索引,其本质原因是对于非聚簇索引,这里有一个覆盖查询的操作,即当查询的字段全部属于建立索引字段时,非聚簇索引不需要进行“回表”,即不需要再去主键索引(聚簇索引)里面进行进一步的查询。 实例: # 对student_info 表格的 name字

be_a_pursuer的博客 6200

mysql 索引的模糊查询_MYSQL语法(模糊查询,视图,索引)

MYSQL语法(模糊查询,视图,索引)2020年08月11日|萬仟网IT编程 |我要评论 MYSQL模糊查询模糊查询,查询name 以张开头的数据select *from t1 where name like ‘张%’;查询姓名包含’三’的记录select *from t1 where name like ‘%三%’;查询姓名以‘刚’结尾的两个字...

weixin_32357285的博客 1633
上一篇: JDK中的timer正确的打开与关闭
下一篇: Java并发编程CAS
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值