问题描述
如下表结构语句:
CREATE TABLE `baby` (
`id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
`uid` bigint(10) unsigned NOT NULL DEFAULT '0' COMMENT '用户ID',
`create_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_uid` (`uid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=18831518 DEFAULT CHARSET=utf8 COMMENT='订单交付记录';
目前要根据uid执行翻页查询语句,并使用explain查看运行效果:
explain select * from order_delivery where uid = 90734220505782 order by id asc;
发现在Extra
中存在filesort
,这涉及到文件排序,会非常影响查询,尤其是命中数据比较多的情况:
Using index condition; Using where; Using filesort
问题出现的环境背景及自己尝试过哪些方法
- 创建了联合索引:对uid+id创建了联合索引,这样确实去掉了filesort情况
你期待的结果是什么?实际看到的错误信息又是什么?
- 除了创建联合索引,还有别的方法,能提高该翻页的查询效率吗,即去调filesort。自己比较抵触这个索引的原因是,id本身就是主键索引,现在对uid+id又创建了索引,该觉很难受!
如果查询语句可以去掉order by id,可以尝试去掉之后再看一下