您正在使用 IPV4 [18.97.14.83] 访问本站,您本次已经查看了 1 页
用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
[公益]保护绿色环境,构建和谐社会      

【腾讯云】2核2G云服务器新老同享 99元/年,续费同价,云服务器3年机/5年机限时抢购,低至 2.5折      
[公益] 地球是我家,绿化靠大家      
2025年 元宵节 003
2025年 高 考 118
2026年 元 旦 326
2026年 春 节 373
 
您现在的位置:首页 >> 数据库 >> 内容
本类新增
本类热门
mysql中关于between和in的区别
内容摘要: mysql中between和in的区别下面两条语句有什么区别,为什么都提倡使用范围查询?select*fromTwherekin(1,2,3,4,5)select*fromTwherekbetween1and5其实between和in这两个关键字应用的场景重合度并不高,但是我们可以通过思考这么一个问题,来理清这两者执行的执行过程和逻辑。要回答这个问题就需要先......
mysql中between和in的区别

下面两条语句有什么区别,为什么都提倡使用范围查询?

select*fromTwherekin(1,2,3,4,5)

select*fromTwherekbetween1and5

其实between和in这两个关键字应用的场景重合度并不高,但是我们可以通过思考这么一个问题,来理清这两者执行的执行过程和逻辑。

要回答这个问题就需要先了解索引的数据结构,以及mysql索引利用b+树执行查询的执行过程,这里先默认大家具备了这个条件。

先区分下可能的情况。

第一个是k字段是主键,第二个是k字段是二级索引,第三种情况是k是普通字段。

另外,我们需要搞清楚in关键字和between两种查询方式在执行的时候的不同之处;

in关键字其实是等值查询的合并,将多个等值查询合并成一个,减少查询和返回次数;

between查询是典型的范围查询,在命中索引的情况下,会直接在查询首个符合条件的数据,然后根据指针一次获取下一个叶子节点数据进行比较直到查询到不符合条件的数据为止。

现在我们再来对三种情况进行梳理,

k是主键索引和二级索引的情况是相似的,唯一的区别就是二级索引的话可能需要回表,回表不是这次讨论的重点,所以我们把这两种情况合并到一起说;

in条件实际查询的时候是多次搜索索引树,而between条件只需要执行一次搜索树的查询就可以获得结果,本题为例,加入索引的底层实现结构使用的是b+树,使用关键字in要树搜素5次,也就是做5次等值查询;而bewteen基于b+树的范围查询逻辑,当找到第一个满足条件的叶子节点后,根据当前叶子节点指向的下一个叶子节点继续查询,直到查到不满足条件的叶子节点,所以只需要树搜索一次。

而对于k不是索引的情况,in条件相当于执行了多次的全文遍历,而between其实也是全文遍历,都不是一个好的方式。

mysql条件查询语句betweenand和in的效率比较

工作需要,写按sensor_uuid在某范围查询的语句:

select*fromxz_sensor_datawheresensor_time>='2019-03-2800:00:00.000'andsensor_time<='2019-03-2808:00:00.000'andsensor_uuidin('20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','201901','201902','201903','201904','201905','201906','201907','201908','201909','201910','201911','201912','201913')orderbysensor_timeasc

select*fromxz_sensor_datawheresensor_time>='2019-03-2800:00:00.000'andsensor_time<='2019-03-2808:00:00.000'and(sensor_uuidbetween'19'and'36'orsensor_uuidbetween'201900'and'201914')

发现第二条执行效率高。

版权声明:本内容来源于网络,如有侵犯您的版权,请联系站长,本站收到您的信息后将及时处理。
上一篇:MySQL中常见的几种日志汇总

 

下一篇:MySQL数据库远程访问权限设置方式

发布日期:2024/1/5
手机扫二维码直达本页
发布时间:10:59:22
点  击:8
录  入:齐天大圣
相关文章
Baidu
YiJiaCMS 7.5.6 build250130(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,创宇云安全提供加速防护
运行时间载入中.....
知道创宇云安全