mysql索引排序问题

问题描述

如下表结构语句:

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

问题出现的环境背景及自己尝试过哪些方法

  1. 创建了联合索引:对uid+id创建了联合索引,这样确实去掉了filesort情况

你期待的结果是什么?实际看到的错误信息又是什么?

  1. 除了创建联合索引,还有别的方法,能提高该翻页的查询效率吗,即去调filesort。自己比较抵触这个索引的原因是,id本身就是主键索引,现在对uid+id又创建了索引,该觉很难受!
阅读 1.8k
1 个回答

如果查询语句可以去掉order by id,可以尝试去掉之后再看一下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题