开发者社区> 问答> 正文

疑似RDB的SQL解析bug

问题场景是从学生注册表中,随机选取指定年级的学生,来参与比赛,这是一个随机选取学生的sql

语句如下,执行以后,发现结果异常,随机数结果偏小

SELECT id  FROM `t_biz_member_class_info`
WHERE `id` > floor(RAND() * (SELECT MAX(id) FROM `t_biz_member_class_info` WHERE `grade` = 3 ))
AND `grade` = 3 ORDER BY id LIMIT 100

于是我们跟踪sql 逻辑发现

拆解后的语句1 -- 选取随机id的边界
SELECT floor( RAND() * (SELECT MAX(id) FROM `t_biz_member_class_info`  WHERE `grade` = 3 ) )
执行正常

拆解后的语句2 - 根据找出随机边界, 找出一条学生记录
SELECT *  FROM `t_biz_member_class_info` WHERE id >= ? AND `grade` = 3  ORDER BY id LIMIT 1
执行正常

我们的数据量在15w左右,将sql拆解成2条,分别执行后随机选取的学生 id号在1000-15w之间,逻辑都正常,但是合并成一条sql后,随机数结果 id全部< 3000 明显异常。

展开
收起
奥焰碧空 2019-01-15 18:13:07 663 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像