问题
:
这个
bug
来源于官方的一个
bug
报告
,
感谢
@
印风
_
小希
.
现象很容易描述
,
直接上例子
.
5.1
以后的版本都有此问题
.
CREATE TABLE `tb` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
KEY `a` (`a`)
) ENGINE=InnoDB DEFAULT
CHARSET=utf8;
|
insert into tb values (1,2),(2,5),(3,8),(4,6);
|
select * from tb
force index (a) where a >=0.5;
+------+------+
| a
| b
|
+------+------+
|
2 |
5 |
|
3 |
8 |
|
4 |
6 |
+------+------+
4 rows in set (0.00
sec)
|
(1,2)
这个记录没有返回
.
说明一下
,select
语句中用
force index
是以防全表扫描
.
(
不走索引
a
就正常了
).
原因分析
:
MySQL
使用索引时
,
调用
innoDB
的
index_read
接口
,
需要传入三个信息
:
查找的值
\
索引
\
查找方向
,
由于查询条件是
>=,
因此查询方向可选的是
HA_READ_AFTER_KEY
和
HA_READ_KEY_OR_NEXT,
分别对应
>
和
>=.
但是传入之前还要作查询优化
.
在这个例子中的流程
:
1)
MySQL
决定使用索引
a
后
,
根据输入的值
(0.5),
取索引
[1, MAX).
之所以取
1,
是因为
a
是一个
int
类型
.;
2)
判断
0.5
和
1
的大小
, 0.5<1,
因此设置
tree->min_flag= NEAR_MIN;
表示实际要查找的值
,
小于传入索引范围的最小值
.
因此决定了使用
HA_READ_AFTER_KEY,
也就是
>0.5,
这没问题
.
3)
不幸的是
,
由于字段
a
是整型
,
真正传入的是
1,
逻辑变成
>1.
所以查找时
a=1
这个记录被忽略了
.
简单修改
:
5.0
版本没这个问题
,
那时候没有
HA_READ_AFTER_KEY
和
HA_READ_KEY_OR_NEXT
这些东西
.
这两个值的差别只是在
innoDB
内部查找的时候要不要判断相等的那个值
,
简单的修改可以都处理为
HA_READ_KEY_OR_NEXT.
不用担心
MySQL
把
>
变成
>=
以后的后果
,
MySQL
层会再作过滤
.
当然上面是偷懒的做法
,
比较正规的做法应该是在
1)
判断大小的时候
,
把
0.5
取整为
1,
这样判断到
1=1,
就会标记为
HA_READ_KEY_OR_NEXT.
分享到:
相关推荐
【描述】"基于PHP的给力搜索爬虫开源源码.zip" 提示我们这里有一个使用PHP编写的网络爬虫项目,它的特点是“给力”,可能意味着该爬虫具有高效、强大或者易用的特性。开源源码意味着任何人都可以查看、学习、修改和...
总结来说,"PHP实例开发源码—PhpCMS SP4 GBK 正式版.zip"是一个包含PHP编程、内容管理系统设计、GBK编码处理等多个知识点的综合实例,适合开发者学习和实践,了解PHP CMS的开发和部署流程,以及中文环境下的编码...
06 django的一个简单应用 07 django静态文件之static 08 django的url控制系统 09 django的urlConf补充 第50章 01 django之视图函数的介绍 02 django视图之redirec 03 django模板之变量 04 django模板之过滤器 05 ...
【ms3-coffeedb】是一个基于Python的项目,它可能是用于构建数据库或者管理数据的工具,考虑到"coffeedb"的命名,我们可以猜测它可能与咖啡店业务或者咖啡爱好者的数据管理有关。由于没有更具体的信息,我们将从...
嵌入式八股文面试题库资料知识宝典-华为的面试试题.zip
训练导控系统设计.pdf
嵌入式八股文面试题库资料知识宝典-网络编程.zip
人脸转正GAN模型的高效压缩.pdf
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
少儿编程scratch项目源代码文件案例素材-鸡蛋.zip
嵌入式系统_USB设备枚举与HID通信_CH559单片机USB主机键盘鼠标复合设备控制_基于CH559单片机的USB主机模式设备枚举与键盘鼠标数据收发系统支持复合设备识别与HID
嵌入式八股文面试题库资料知识宝典-linux常见面试题.zip
面向智慧工地的压力机在线数据的预警应用开发.pdf
基于Unity3D的鱼类运动行为可视化研究.pdf
少儿编程scratch项目源代码文件案例素材-霍格沃茨魔法学校.zip
少儿编程scratch项目源代码文件案例素材-金币冲刺.zip
内容概要:本文深入探讨了HarmonyOS编译构建子系统的作用及其技术细节。作为鸿蒙操作系统背后的关键技术之一,编译构建子系统通过GN和Ninja工具实现了高效的源代码到机器代码的转换,确保了系统的稳定性和性能优化。该系统不仅支持多系统版本构建、芯片厂商定制,还具备强大的调试与维护能力。其高效编译速度、灵活性和可扩展性使其在华为设备和其他智能终端中发挥了重要作用。文章还比较了HarmonyOS编译构建子系统与安卓和iOS编译系统的异同,并展望了其未来的发展趋势和技术演进方向。; 适合人群:对操作系统底层技术感兴趣的开发者、工程师和技术爱好者。; 使用场景及目标:①了解HarmonyOS编译构建子系统的基本概念和工作原理;②掌握其在不同设备上的应用和优化策略;③对比HarmonyOS与安卓、iOS编译系统的差异;④探索其未来发展方向和技术演进路径。; 其他说明:本文详细介绍了HarmonyOS编译构建子系统的架构设计、核心功能和实际应用案例,强调了其在万物互联时代的重要性和潜力。阅读时建议重点关注编译构建子系统的独特优势及其对鸿蒙生态系统的深远影响。
嵌入式八股文面试题库资料知识宝典-奇虎360 2015校园招聘C++研发工程师笔试题.zip
嵌入式八股文面试题库资料知识宝典-腾讯2014校园招聘C语言笔试题(附答案).zip
双种群变异策略改进RWCE算法优化换热网络.pdf