设为首页 收藏本站
查看: 514|回复: 0

[经验分享] mysql5.7的bug

[复制链接]
累计签到:34 天
连续签到:2 天
发表于 2018-4-26 10:07:00 | 显示全部楼层 |阅读模式
一个表,表结构如下:
CREATE TABLE “user_task” (
“id” int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘自增ID’,
“parent_id” int(10) NOT NULL DEFAULT ‘0’ COMMENT ‘问题id’,
“author” int(10) NOT NULL DEFAULT ‘0’ COMMENT ‘发布人pid’,
“con_id” int(10) NOT NULL COMMENT ‘群组id’,
“type” tinyint(2) NOT NULL DEFAULT ‘0’ COMMENT ‘类型(0 问题;1回答)’,
“title” varchar(200) NOT NULL DEFAULT ” COMMENT ‘标题’,
“info” varchar(500) NOT NULL DEFAULT ” COMMENT ‘文本’,
“pic” text NOT NULL COMMENT ‘图片(json)’,
“audio” text NOT NULL COMMENT ‘音频(json)’,
“start_time” int(10) NOT NULL DEFAULT ‘0’ COMMENT ‘发布时间’,
“end_time” int(10) NOT NULL DEFAULT ‘0’ COMMENT ‘截止时间’,
“create_at” int(10) NOT NULL,
“modify_at” timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
“isread” tinyint(3) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘0 已读 1 未读’,
PRIMARY KEY (“id”),
UNIQUE KEY “idx_con_title” (“con_id”,”title”)
) ENGINE=InnoDB AUTO_INCREMENT=401 DEFAULT CHARSET=utf8
这个表一个主键+一个唯一性索引。数据量也很少。
mysql> select count(*) from user_task;
+———-+
| count(*) |
+———-+
|       54 |
+———-+
1 row in set (15.76 sec)
总共54条数据。
然后我们执行下面的这些sql , 请开始仔细观察。
mysql>  SELECT distinct  con_id   FROM user_task  where id in (56,57);
+——–+
| con_id |
+——–+
|    844 |
+——–+
mysql> explain  SELECT distinct  con_id   FROM user_task  where id in (56,57);
+—-+————-+———–+————+——-+———————–+———+———+——+——+———-+——————————+
| id | select_type | table     | partitions | type  | possible_keys         | key     | key_len | ref  | rows | filtered | Extra                        |
+—-+————-+———–+————+——-+———————–+———+———+——+——+———-+——————————+
|  1 | SIMPLE      | user_task | NULL       | range | PRIMARY,idx_con_title | PRIMARY | 4       | NULL |    2 |   100.00 | Using where; Using temporary |
+—-+————-+———–+————+——-+———————–+———+———+——+——+———-+——————————+
查看执行计划,走了主键索引。
mysql>  SELECT distinct  con_id   FROM user_task  where id in (56,57,58);
+——–+
| con_id |
+——–+
|    844 |
|    785 |
+——–+
2 rows in set (17.30 sec)
mysql>  SELECT distinct  con_id   FROM user_task  where id in (56,57,58,66);
+——–+
| con_id |
+——–+
|    844 |
|    785 |
+——–+
mysql>  SELECT distinct  con_id   FROM user_task  where id in (56,57,58,66,70);
+——–+
| con_id |
+——–+
|    844 |
|    785 |
+——–+
2 rows in set (20.64 sec)
mysql>  SELECT distinct  con_id   FROM user_task  where id in (56,57,58,66,70,71);
Empty set (3 min 0.16 sec)
看到了没, 妖娥子在这里出现了,where 条件范围变大了, 结果却没有了,一身汗。。。。。
结果为什么会变没有了? 谁吃了这个结果? 查看执行计划,
mysql> explain   SELECT distinct  con_id   FROM user_task  where id in (56,57,58,66,70,71);
+—-+————-+———–+————+——-+———————–+—————+———+——+——+———-+—————————————+
| id | select_type | table     | partitions | type  | possible_keys         | key           | key_len | ref  | rows | filtered | Extra                                 |
+—-+————-+———–+————+——-+———————–+—————+———+——+——+———-+—————————————+
|  1 | SIMPLE      | user_task | NULL       | range | PRIMARY,idx_con_title | idx_con_title | 4       | NULL |    6 |    11.11 | Using where; Using index for group-by |
+—-+————-+———–+————+——-+———————–+—————+———+——+——+———-+—————————————+
1 row in set, 1 warning (0.00 sec)
发现走的是idx_con_title  索引 。
鄙视mysql:   走这个索引也无伤大雅, 干嘛把结果弄丢了?
如果改写成group by , 如下
SELECT  con_id  ,count(*)  FROM user_task  where id in (56,57,58,66,70,71) group by con_id ;
结果正常。
如果将索引idx_con_title 删除, 下面sql结果正常。
SELECT distinct  con_id   FROM user_task  where id in (56,57,58,66,70,71);
巨坑巨坑的bug,,,,,,且在5.7.18 以及5.7.20上均出现,其他版本未测试。
目前怀疑: 问题出现mysql的优化器上面,使用另外一个索引时,执行路径不完整(错误)导致 。明天向官方提bug.


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-452138-1-1.html 上篇帖子: Centos下samba服务快速搭建 下篇帖子: CentOS(RHEL)内核版本与系统版本对应关系
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表