2 mysql 5.7.16-ucloudrel1-log 索引 order by desc 执行慢

发布于 2021-07-15 11:48:53

mysql版本:
image.png
表:

CREATE TABLE `heart_rate_analysis` (
  `autoid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键'
  `id` varchar(50) DEFAULT NULL COMMENT 'uuid'
  `user_id` int(10) unsigned NOT NULL COMMENT '用户id'
  ...
  ... -- 其他非索引列 
  ...
  `measurement_date` datetime NOT NULL COMMENT '测量开始时间'
  `date_stamp` int(10) unsigned NOT NULL COMMENT '年月日'
  `updated` bigint(20) unsigned NOT NULL COMMENT '更新时间'
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
  PRIMARY KEY (`autoid``create_time`)
  UNIQUE KEY `uniq_userId_dateStamp_createTime` (`user_id``date_stamp``create_time`)
  KEY `idx_userId_measurementDate` (`user_id``measurement_date`)
  KEY `idx_userId_updated` (`user_id``updated`)
  KEY `idx_updateTime` (`update_time`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4573938 DEFAULT CHARSET=utf8;
-- 使用create_time创建了按月的分区,PARTITION BY RANGE (to_days(create_time))
数据量大小3.3G

慢sql(执行时间超过1S):

SELECT * FROM heart_rate_analysis
WHERE user_id = '214984' AND date_stamp < '20210713'
AND silent_heart_rate != 0
ORDER BY date_stamp desc LIMIT 7
注:该慢sql 在5.6.20-ucloudrel1-log版本中,是正常耗时的

排序修改为asc(执行时间小于100ms):

SELECT * FROM heart_rate_analysis
WHERE user_id = '214984' AND date_stamp < '20210713'
AND silent_heart_rate != 0
ORDER BY date_stamp asc LIMIT 7
或者替换排序字段measurement_date desc,也是正常耗时

explain:
image.png

image.png
sql执行耗时图:
image.png

image.png

结论:
到底是bug 还是设置了什么呢?

关注者
0
被浏览
544
云小U
云小U 2021-07-15
绑定邮箱,可随时随地接收消息通知~

限定了1024 px高度 可以艾特我们 @u1577 这样

精神小伙
精神小伙 2021-07-15

已经找到原因了

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友