mysql排序不走索引问题,请帮忙指导下,谢谢!

起个昵称吧 发布于 2019/06/16 13:14
阅读 1K+
收藏 0

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

各位好:

   在使用Mysql数据库查询数据时,使用order by进行排序,但是用explain时发现却没有走索引,不知道差哪了,麻烦各位帮忙指导下,谢谢!

CREATE TABLE `youhuer_share_record` (
  `shareId` varchar(32) NOT NULL,
  `userId` varchar(32) DEFAULT NULL,
  `shareTime` int(10) DEFAULT NULL,
  `status` int(1) DEFAULT NULL,
  `businessId` varchar(32) DEFAULT NULL,
  `businessType` int(1) DEFAULT NULL,
  `title` varchar(1000) DEFAULT NULL,
  `shareType` int(1) NOT NULL DEFAULT '0',
  `des` varchar(1000) DEFAULT NULL,
  PRIMARY KEY (`shareId`),
  KEY `idx_share_userId` (`userId`,`status`,`shareTime`) USING BTREE,
  KEY `idx_share_shareTime` (`userId`,`shareTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

执行explain结果如下:

 explain select shareId,userId,shareTime,status,businessId,businessType,title,shareType,des from youhuer_share_record where userId = '0' and  status = 1 order by shareTime desc limit 1,5;
+----+-------------+----------------------+------+--------------------------------------+------+---------+------+------+-----------------------------+
| id | select_type | table                | type | possible_keys                        | key  | key_len | ref  | rows | Extra                       |
+----+-------------+----------------------+------+--------------------------------------+------+---------+------+------+-----------------------------+
|  1 | SIMPLE      | youhuer_share_record | ALL  | idx_share_userId,idx_share_shareTime | NULL | NULL    | NULL |    4 | Using where; Using filesort |
+----+-------------+----------------------+------+--------------------------------------+------+---------+------+------+-----------------------------+
1 row in set

加载中
0
我本晋南走卒
我本晋南走卒
具体都没用到索引,keys都是空。
0
我本晋南走卒
我本晋南走卒
可以强制试用索引share userid但是我理解mysql的索引选择已经非常好了,要么是你这个索引的数据跟全表扫描没啥区别 故他没有使用索引
0
喜之郎
喜之郎

这样建索引试试:`userId`,`status`这两列建复合索引,shareTime单独建索引。

0
游侠v

order by userid,shareTime

0
约黄昏

因为是`userId`,`shareTime`组合索引,只可以从左边字段开始使用索引

order by userId,shareTime或order by userId可以用上索引

0
不喜欢暴力运动
不喜欢暴力运动
用的是联合索引 考虑最左选择可以加个uid试试
0
f
freezingsky

如果已经对索引做了优化,但是引擎没有走特定的索引 ,在这种情况下, 可以强制指定索引,就完事了!

0
逍遥huang
逍遥huang

索引不但需要最左匹配原则,还要离散性好,我估计你的status 里面基本是0,1这种重复数据

0
shuns
shuns

 status = 1 order by shareTime +0  desc limit 1,5;

 

shareTime +0   就会走索引  

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部
返回顶部
顶部