索引失效的特殊场景:只有like ‘xxxx%’一个条件,索引也可能失效

LIKE ‘%xxx%‘ 和 LIKE ‘xxx%‘ 的索引影响分析 摘要:LIKE查询的索引使用取决于通配符位置:LIKE 'xxx%'能有效利用B-Tree索引进行前缀匹配,而LIKE '%xxx%'会导致索引失效,必须全表扫描。优化方案包括反向索引、全文索引或专用搜索引擎。实际测试显示,前缀查询使用索引后速度可提升数百倍。面试时应解释原理并展示优化思路,工作中应避免前导通配符或改用专业文本搜索技术。 阅读详情

发现问题:内网系统,随着数据量增多,页面一个统计功能特别慢,跟踪定位分析,发现统计sql有问题,有个关键的索引未生效。千万级的数据,全表扫描.......最后缩减到最简单的一句,select * from table  where zjhm like 'xxxx%',还是没用到索引,什么情况?百度N篇索引失效,各种试,然后发现了个关于索引失效有趣的问题。

试验过程:

内网oracle,外网Mysql,数据量一千七百万,条件:证件号码,普通索引;

Sql:select  *  from table t where t.zjhm like 'xxxx%';

数据分布:天津旅馆业数据(别纳闷怎么只有这么点数据,这新系统上线才八个月)。

试验结果表:

编号

like条件(总18位)

数量(单位:万)

比例(总1700万)

Mysql(5.7)

Oracle(11g)

1

12

330

19.41%

否

否

2

120103

24.7

1.45%

是

否

3

12010319

24.2

1.42%

是

否

4

65

10

0.59%

是

否

5

120103199

5.6

0.33%

是

是

6

653

0.96

0.056%

是

否

7

6531

0.56

0.033%

是

是

8

8

0.24

0.014%

是

是

sql里解释计划的图我就不发了,测验结果绝对没问题,好奇的是有两组数据。第5,6组数据,六组比五组少很多数据,但奇怪的是五组用到索引了,六组没用到。难道这和like中条件的所占位数还有关系么???

我的结论:like  'xxxx%' 时是否使用索引,与该条件数量和数据总量比例有关,具体多少不清楚,虽然知道大量重复数据会导致不走索引,like 时应该和这个同理,但百度了N篇,没一篇有提到过这现象。另怀疑还有可能和like字符长度位数占总位数比例有关。我这只是实践得出,具体是否正确,有待证实!

有深入研究过Mysql,Oracle索引机制的大神们,欢迎点评,谢谢!

 

 

 

从零开始学嵌入式之STM32——1.什么是STM32 它是ST公司推出的一系列单片机的统称。ST----指的是ST公司----意法半导体。意法半导体,成立于1987年,是由意大利的SGS微电子公司和法国的Thomson半导体公司合并而成。ARM目前主要是ARM架构处理器及外围组件的电路设计方案,知识产权授权的形式收取费用,其他公司根据ARM的方案设计出CPU产品。,它以应用为核心,软硬件可裁剪,旨在实现对设备的控制、监测或辅助功能,区别于通用计算机(如 PC、服务器)的 “一机多用” 属性。在嵌入式领域,目前主流的是cortex-M3内核推出的芯片。 阅读详情

相关推荐

HFSS 3D Layout一键导入PCB,高效搞定微带线损耗仿真

在高速PCB设计中,信号完整性与电磁仿真是确保链路质量的关键环节。传统的HFSS手动建模流程繁琐且极易出错,尤其面对微带线、带状线等高频结构时,叠层参数、铜箔粗糙度等细节难以精准还原,导致仿真结果与实测偏差较大。HFSS 3D Layout模块提供了从EDA工具直接导入PCB文件的能力,完整保留走线、过孔、叠层及材料属性,结合精确的介质损耗模型与端口设置,大幅缩短建模时间并提升仿真精度。该技术广泛应用于DDR、SerDes等高速数字链路的设计验证,以及SI/PI工程师对PCB损耗性能的快速评估。本文从导入操

weixin_29191081的博客 257

【MySQL系列】- LIKE查询 以%开头一定会让索引失效吗

LIKE查询以%开头不一定会让索引失效。

做一个有思想的技术人 6750

告别‘火龙’:实测BES2800/RK2108等主流芯片,聊聊AI眼镜的功耗与散热‘内卷’实战

本文深入探讨了AI智能眼镜在功耗与散热方面的挑战,重点分析了恒玄BES2800和瑞芯微RK2108等主控芯片的能效表现。通过实测数据和优化策略,揭示了在6nm工艺、异构计算和系统级散热方案下的实战经验,为AI眼镜的功耗管理提供了实用解决方案。

weixin_30839881的博客 948

like‘%xxxxx%‘性能优化

前言: like使用方式一共三种格式 like ‘xxxx%’——这种能正常使用索引 like ‘%xxxx’——利用reverse函数索引优化 like’%xxxx%’——使用客制化函数instr和通用手段两种方法 一、构建实验条件 1.创建测试表(大概90M) create table test1 as select level id, dbms_random.string('X', 30) name, dbms_random.string('f', 30) address,

riven2011的博客 855

从硬件异常到代码救赎:RH850内存访问错误(MAE)的深层诊断与艺术

本文深入探讨瑞萨RH850微控制器的内存访问错误(MAE)诊断与解决方法。针对程序跑飞和Flash Driver交互中的潜在陷阱,提供系统性硬件异常分析框架和防御性编程实践,帮助嵌入式开发者从底层机制到代码层面有效预防和修复MAE问题,提升系统稳定性。

pytorch8learner的博客 197

【异常】OpenClaw提示异常 1302:您的账户已达到速率限制,请您控制请求频率

摘要:系统返回1302错误码提示"账户已达到速率限制",表明请求频率超过服务阈值。主要原因是并发请求数达上限或请求过于密集。解决方案包括:降低并发请求量、引入请求队列机制平滑流量,或根据服务规则提升账户权益等级以获取更高并发额度。建议优先优化请求频率控制策略,避免触发系统限流机制。

奶爸的编程之路,也就一周冷个三天 1148

java面试:like %xxx%该如何优化

再来简单分析一下索引条件下推的原理,在执行查询时先利用SQL中所提供的created_at条件在联合索引B+树中进行快速查找,匹配到所有符合created_at条件的B+树叶子节点后,再根据company_name条件进行过滤,然后再根据过滤之后的结果中的主键ID进行回表找到其他字段(回表),最终才返回结果,这样处理的好处是能够减少回表的次数,从而提高查询效率。所以,并不是like %xxx%就一定会导致索引失效,原理也可以配合其他字段一起来建联合索引,从而使用到索引条件下推机制。

u013938578的博客 486

【教程4>第1章>第11节】使用MATLAB快速产生批量verilog语句加快FPGA开发

...........如果手动写,那么就非常麻烦,这个时候,我们借助matlab,则可以快速生成上述类型的verilog程序,我们编写如下的MATLAB语句。\n");\n");end。

FPGA/MATLAB学习教程/源码/项目合作开发 1241

like ‘%xxx%‘ 中MySql对索引的选择性

本文主要解释like是否选择索引查询的两个因素: 是否为覆盖索引场景 离散型的高低 一、首先阐述下结论: - 覆盖索引场景下,like '%XX'不走索引,like '%XX%'和like 'XX%'均走索引。 - 覆盖索引场景下, like ‘%xttblog%’, like ‘%xttblog’均不走索引,like ‘XXX%’可能会走索引(决定于离散型)。 附:非覆盖索引场景下,大家知道Mysql索引有最左原则,所以通过 like '%XX%'查询的时候一定会造成索引失效(5.7版本覆盖索.

qq_40690077的博客 487

第二节_PySide6项目创建流程介绍、手把手教学打包EXE可执行文件

本文详细介绍了如何使用PySide6创建一个带UI界面的Python程序,并将其打包成exe可执行文件。首先,通过Pycharm创建项目,并使用PySide6-Designer工具设计UI界面,将生成的ui文件转换为Python代码。接着,编写主程序,加载UI界面并实现功能,如加载图片、设置图标等。最后,通过资源文件管理图片资源,并确保UI界面的更新能同步到主程序中。整个过程涵盖了项目创建、UI设计、代码编写及资源管理,适合初学者学习如何将Python程序打包为可执行文件。

su桥木的博客 2565

SCTPPortScan SCTP协议端口扫描、关联地址识别、传输状态检测

Windows:Winsock2+SCTP扩展)。- **SCTP API封装**:Linux下直接调用`socket()`、`connect()`、`getsockopt()`等系统函数,解析`struct sctp_status`和`struct sctp_paddrinfo`获取状态和关联地址。qDebug() << "开始SCTP扫描:" << ipList.size() << "个IP," << ports.size() << "个端口,共" << m_totalTasks << "个任务";

寒寒豆豆软件公司的博客 93

【MySQL 索引】like “%XX“ 和 like “XX%“ 的特殊情况

[MySQL] like “%XX” 和 like “XX%” 的特殊情况 在 MySQL 的 InnoDB 的情况下,对某一建过索引的列进行 like 模糊查询时 like “%XX” 是不会走索引的 like “XX%” 还是会走索引的 但是还是存在一些特殊的情况,MySQL 的底层会帮我们优化,使上面的 2 条结论变成 不一定。 表结构 SQL CREATE TABLE `test...

LCN29的博客 2875

第0章 《机器人工程师带你入门SLAM》专栏所有文章目录汇总(截止目前115篇文章),方便大家查看阅读

《机器人工程师带你入门SLAM》专栏文章汇总:优快云热销专栏已更新100+篇优质内容,涵盖SLAM技术全栈知识体系。文章分为三大类:1)基础工具与环境配置,包括Ubuntu、Git等必备技能;2)C++编程从入门到进阶,详解变量、类、模板等核心概念;3)SLAM核心库实战,深入解析ROS、Eigen、PCL等关键库的应用。专栏提供从计算机基础到项目实战的系统学习路径,并附代码实例。点击专栏主页可订阅查看全部内容,后续将保持更新。

行知SLAM 1071

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

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

weixin_39947501的博客 396

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

XXXXXXXXXX

全球可信并且唯一免费的HTTPS(SSL)证书颁发机构:StartSSL

待定的专栏 15万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

xxxx

名称解释: MOM: 面向消息的中间件(Message-Oriented Middleware) GUI: 图形用户界面(Graphic User Interface) PDL: 过程设计语言(Process Design L...

congku8444的博客 9956

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

利用reverse函数索引优化like ‘%xxxx‘

前言: 我们都知道在使用Like模糊查询,只有使用like 'xxxx%'格式才能正确利用索引范围扫描,那么实际中遇到按字符串末尾模糊查询(%xxxx)该如何优化? 一、构建实验例子 1.创建测试表(大概90M) create table test1 as select level id, dbms_random.string('X', 30) name, dbms_random.string('f', 30) address, dbms_random.string

riven2011的博客 604

将oracle select * from all_tab_comments where comments like ‘%XXXX%‘查询结果转为select语句

oracle查询表格的时候会有一句 select * from all_tab_comments where comments like '%XXXX%' 就能查到相关注释的一些表格,这些表格有时候很想跑出来看一下,我用的是pl/sql,一个个复制很麻烦,所以就想到自己写一个js小工具,复制两列,第一列是项目空间,第二列是表名,比如: 项目空间 表名 注释 deparment Personnel 人事部信息 deparmentRD ...

sinolzeng的专栏 912

like查询后置% 索引竟然也失效

背景 昨天早上接到一个任务,查询某类商品,数据库用的是mysql,版本是5.6.37,es_product 表数据不多,两万多条。执行语句我简化了一下,类似下面的这条sql: SELECT * FROM es_product WHERE goods_code LIKE 'meiju%'; goods_code是建了索引的,索引类型Normal。 语句执行的很慢,我们看下它的执行计划是什么: EXP...

sheepherder 4455

like ‘%ids%‘ 索引失效解决方法

like时索引失效解决方法

weixin_43885078的博客 2468

学点关于索引的知识

首先是从面试题切入吧,因为是比较常问但不复杂得那种.(摘抄) Q:你们每天这么大的数据量,都是保存在关系型数据库中吗? A:是的,我们线上使用的是MySQL数据库 Q:每天几百万数据,一个月就是几千万了,那你们有没有对于查询做一些优化呢? A:我们在数据库中创建了一些索引(我现在非常后悔我当时说了这句话) Q:那你能说说什么是索引吗? A:(这道题肯定难不住我啊)索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据 Q:那么索引具体采用的哪种数据结构呢? A:(这道题我也背过)常见的MySQL主要有

z184162946的博客 462

一篇文章了解Like用法及常见索引失效情况

本文主要通过介绍Like索引优化以及全文索引,以MySQL为例。reverse()应用场景,比如你根据身份证查询一个市洲的人员信息。众所周知,同一个市洲大部分人员身份证前6位是相同的,比如黄石,前六位420222。这个时候你就可以通过reverse()字段,创建身份证后6位的前缀索引进行查询。**

qq_48157004的博客 1万+

MYSQL索引不生效的原因

有时候我们明明加了索引了,但是索引却不生效。在哪些情况下,索引会不生效呢?

qq_39004843的博客 5756

MySQL-like可能导致索引失效

一、like导致的索引失效 1、新建一张用户表并创建address索引 CREATE TABLE `user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(16) CHARACTER SET latin1 DEFAULT '', `age` tinyint(4) DEFAULT '0', `address` varchar(32) CHARACTER SET latin1 DEFAULT '', PRIMARY

zym_1321的博客 7003
上一篇: kettle传输数据使用java对ASE128密文解密
下一篇: Redis持久化学习
github_38806262
博客等级 码龄10年 8粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值