首页 游戏 软件 资讯 排行榜 专题
首页
科技数码
MySQL索引两类全表扫描隐患的排查与优化策略

MySQL索引两类全表扫描隐患的排查与优化策略

热心网友
50
转载
2026-03-05

在上篇文章里,我们举了一个因强制类型转换导致死锁的例子。有朋友问到,是不是所有类型转换都不能命中索引呢?花一分钟详细说说。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

在《两个小公举,调试MySQL死锁必备!》一文中,我们曾提到过一个因强制类型转换引发死锁的案例。有朋友因此追问,是否所有类型转换都会导致索引失效?接下来,我们就花一分钟,把这个问题讲清楚。

第一类:“列类型”与“where值类型”不符,不能命中索引,会导致全表扫描(full table scan)。

数据准备:

create table t1 (cell varchar(3) primary key)engine=innodb default charset=utf8;
insert into t1(cell) values (‘111’),(‘222’),(‘333’);

cell字段为varchar字符串类型,同时作为主键,即聚簇索引(clustered index)。我们往t1表中插入了3条测试数据。

测试语句:

explain select * from t1 where cell=111;
explain select * from t1 where cell=’111’;

第一条语句中,where条件的值类型是整数(与表定义中cell的类型不符);第二条语句,where条件的值类型是字符串(与cell类型一致)。

测试结果:

可以看到,当发生强制类型转换时,索引无法命中,查询需要扫描全表(共3条记录);而当类型一致时,索引命中,仅扫描一条记录。

第二类:相join的两个表的字符编码不同,不能命中索引,会导致笛卡尔积的循环计算(nested loop)。

数据准备:

create table t2 (cell varchar(3) primary key)engine=innodb default charset=latin1;
insert into t2(cell) values (‘111’),(‘222’),(‘333’),(‘444’),(‘555’),(‘666’);
create table t3 (cell varchar(3) primary key)engine=innodb default charset=utf8;
insert into t3(cell) values (‘111’),(‘222’),(‘333’),(‘444’),(‘555’),(‘666’);

t2与t1的字符集不同,我们插入了6条测试数据。t3与t1字符集相同,同样插入了6条测试数据。除此之外,t1、t2、t3三张表的表结构完全相同。

测试语句:

explain select * from t1,t2 where t1.cell=t2.cell;
explain select * from t1,t3 where t1.cell=t3.cell;

第一个join连接的是t1和t2(字符集不同),关联字段是cell;第二个join连接的是t1和t3(字符集相同),关联字段同样是cell。

测试结果:

由于t1和t2字符集不同,底层存储空间不同,当它们进行join时,执行计划显示需要先遍历t1的所有记录(3条),然后t1的每一条记录又要去遍历t2的所有记录(6条),实际上进行了笛卡尔积循环计算(nested loop),索引完全失效了。

而在t1与t3的join中,虽然也遍历了t1的所有记录(3条),但t1的每一条记录都可以利用t3的索引进行快速查找,即仅扫描一行记录,效率显著提升。

画外音:图片请放大查看。

总结

这里总结了两类容易被忽视、导致索引失效的情形:

表列类型,与where条件的值类型不一致;参与join的表,其字符编码不同。

知其然,更要知其所以然。

分析问题的思路,比结论本身更重要。

来源:https://www.51cto.com/article/836193.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

埃森哲AI助手:用超级记事本解决长期工作记忆难题
科技数码
埃森哲AI助手:用超级记事本解决长期工作记忆难题

当我们在处理复杂的工作任务时,经常需要在不同的文档、网页和工具之间来回切换,同时还要记住之前做过的事情和得到的结果。现在的AI助手也面临着同样的挑战——当对话变得很长、需要使用很多工具时,它们就像一

热心网友
03.16
人大团队突破:借助AI实现过目不忘的高效记忆
科技数码
人大团队突破:借助AI实现过目不忘的高效记忆

这项由中国人民大学人工智能学院研究团队领导的研究发表于2026年3月的国际信息检索会议,研究团队包括谭杰军、窦志成等多位学者,有兴趣深入了解的读者可以通过论文编号arXiv:2603 03379v1

热心网友
03.09
MySQL索引两类全表扫描隐患的排查与优化策略
科技数码
MySQL索引两类全表扫描隐患的排查与优化策略

在之前的文章中,举了一个强制类型转换导致死锁的例子,有朋友询问是不是类型转换都不能命中索引,花1分钟细说一下。 《两个小公举,调试MySQL死锁必备!》中,举了一个强制类型转换导致死锁的例子,有朋友

热心网友
03.05
约翰霍普金斯大学实现多模态检索突破:任意模态向量压缩
科技数码
约翰霍普金斯大学实现多模态检索突破:任意模态向量压缩

这项由约翰霍普金斯大学计算机科学系领导的研究发表于2026年,研究论文编号为arXiv:2602 21202v1,有兴趣深入了解的读者可以通过该编号查询完整论文。这项研究解决了一个看似技术性却与我们

热心网友
02.28
MySQL索引优化:五个高频实用技巧提升查询效率
科技数码
MySQL索引优化:五个高频实用技巧提升查询效率

MySQL 索引优化不用追求复杂,把以下五个基础技巧用熟,就能解决80%的索引问题。 MySQL索引优化是提升SQL查询效率的核心方法,用好索引能让慢查询“飞起来”,用不好反而会拖垮数据库。今天整理

热心网友
02.13

最新APP

你比我猜
你比我猜
休闲益智 03-26
锦绣商铺
锦绣商铺
模拟经营 03-26
儿童画画
儿童画画
休闲益智 03-25
疯狂猜词
疯狂猜词
休闲益智 03-25
诸神皇冠
诸神皇冠
棋牌策略 03-25

热门推荐

猎豹浏览器免安装网页版:在线云端使用入口与教程
电脑教程
猎豹浏览器免安装网页版:在线云端使用入口与教程

猎豹浏览器免安装网页版入口是https: web lemur-browser com,具备界面简洁响应迅速、多端同步无缝衔接、安全防护层级丰富、文档处理能力突出、资源兼容性广泛覆

热心网友
03.27
昆仑万维发布三大世界第一梯队AI模型
科技数码
昆仑万维发布三大世界第一梯队AI模型

据昆仑万维集团消息,3月27日下午,昆仑万维(300418 SZ)旗下天工AI顺利举办“世界模型前沿技术与天工AIGC全家桶大模型生态”专场发布会,携Matrix-Game 3 0、SkyReels

热心网友
03.27
杨植麟、张鹏、夏立雪、罗福莉论道大模型:未来一年趋势前瞻
科技数码
杨植麟、张鹏、夏立雪、罗福莉论道大模型:未来一年趋势前瞻

本报(chinatimes net cn)记者石飞月 北京报道大模型未来会走向哪里?OpenClaw的爆火似乎为全行业指明了一个方向,但接踵而至的舆论质疑,又让这个答案变得扑朔迷离。3月27日,在2

热心网友
03.27
Anthropic核心模型意外泄露,网络安全股面临冲击风险
科技数码
Anthropic核心模型意外泄露,网络安全股面临冲击风险

Anthropic一款尚未发布的新AI模型因数据泄露意外曝光,引发市场对AI颠覆网络安全行业的担忧再度升温,网络安全板块股价周五盘前全线下挫。据《财富》杂志报道,Anthropic正在开发并已开始向

热心网友
03.27
Token经济到来,解析互联网大厂的布局与冷思考
科技数码
Token经济到来,解析互联网大厂的布局与冷思考

3月初,腾讯在深圳总部楼下设立“龙虾站”,引发千人排队尝鲜。OpenClaw掀起的“全民养虾”热潮,在短短一个月内让更多人看到了AI Agent深入业务场景的价值,随即推动Token调用量大规模增长

热心网友
03.27