mysql优化篇:like和=的性能分析
来源:SegmentFault
时间:2023-02-24 20:18:04 331浏览 收藏
编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《mysql优化篇:like和=的性能分析》,文章讲解的知识点主要包括MySQL、数据库,如果你对数据库方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。
引言
select * from info where id like '1%';
select * from info where id like '12345';
explain select * from info where id like '12345';
那我们来使用explain测试一下like和=下的查询情况,首先我们来测试一下为索引的字段:
EXPLAIN SELECT * FROM crms_customer WHERE id = '7cf79d7c8a3a4f94b5373b3ec392e32d';
而现在我们把"="换成like试一下:
EXPLAIN SELECT * FROM crms_customer WHERE id LIKE '7cf79d7c8a3a4f94b5373b3ec392e32d';
小伙伴通过对比可以看到两条返回结果的type字段和Extra字段中的数据有所不同,那为什么不同,他们所代表的含义是什么呢?
type字段
type字段是一个可选值,这些值的性能从低到高的排序如下:
type | 说明 |
---|---|
SYSTEM | 系统,表仅有一行(=系统表)。这是const联接类型的一个特例 |
CONST | 常量,表最多有一个匹配行,因为仅有一行,在这行的列值可被优化器剩余部分认为是常数,const表很快,因为它们只读取一次 |
EQ_REF | 搜索时使用primary key 或 unique类型 |
REF | 根据索引查找一个或多个值 |
INDEX_MERGE | 合并索引,使用多个单列索引搜索 |
RANGE | 对索引列进行范围查找 |
index | 全索引表扫描 |
ALL | 全数据表扫描 |
根据表格可以明显看出,其中const是常量查找,而RANGE是对索引列进行范围查找,所以性能也就很明显的体现了出来。
那使用like查询时,Extra字段代表什么呢?Extra字段中的Using where,又代表什么?
Extra字段
1,Extra字段是Explain输出中也很重要的列,所代表着MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。
2,Extra字段中的Using where意味着mysql服务器将在存储引擎检索行后再进行过滤。所以比起使用使用'='又多了一步查找过程。
显然通过以上的总结我们可以得出结论:当我们使用索引字段进行条件查询时,'='的性能要比like快。
是不是以为到这里就结束了呢?
然而并没有
有的小伙伴该问了那非索引字段呢?
对的,我们下面继续测试非索引字段
EXPLAIN SELECT * FROM crms_customer WHERE customer_name = '张飞'; ----------------------------------- EXPLAIN SELECT * FROM crms_customer WHERE customer_name LIKE '张飞';
除了"="和like同样的两条语句,让我们运行一下:
"=":
like:
可以看出当非索引字段时like和"="是一样的,性能上也没有差别。
(当然,explain中还有很多其他字段,后续我会一一给小伙伴们讲解的。)
结论
经过我们的不懈努力,可以得到结论:当like和"="在使用非索引字段查询时,他们的性能是一样的;而在使用索引字段时,由于"="是直接命中索引的,只读取一次,而like需要进行范围查询,所以"="要比like性能好一些。~~~~
好了,本文到此结束,带大家了解了《mysql优化篇:like和=的性能分析》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!
-
499 收藏
-
244 收藏
-
235 收藏
-
157 收藏
-
101 收藏
-
334 收藏
-
420 收藏
-
165 收藏
-
397 收藏
-
489 收藏
-
209 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习
-
- 酷炫的小甜瓜
- 这篇技术文章真是及时雨啊,太全面了,很棒,码住,关注up主了!希望up主能多写数据库相关的文章。
- 2023-06-09 22:55:09
-
- 动人的吐司
- 太详细了,码起来,感谢大佬的这篇文章,我会继续支持!
- 2023-05-20 22:19:40
-
- 美好的山水
- 这篇技术文章真及时,很详细,受益颇多,收藏了,关注老哥了!希望老哥能多写数据库相关的文章。
- 2023-04-17 23:15:28
-
- 还单身的高跟鞋
- 很好,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢大佬分享博文!
- 2023-04-08 04:50:37
-
- 眯眯眼的荔枝
- 细节满满,已加入收藏夹了,感谢师傅的这篇博文,我会继续支持!
- 2023-04-06 09:10:13
-
- 虚心的香水
- 写的不错,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢作者分享文章!
- 2023-03-28 20:14:17
-
- 欢喜的钢笔
- 这篇文章内容出现的刚刚好,楼主加油!
- 2023-03-12 01:34:46