filesort问题,大牛帮帮忙

edisonli 2013-10-16 12:13:14

EXPLAIN SELECT id, IsTop, IsNew, Title, TitleColor, TitleBold, IsLink, Url, Thumb, info.Template, UpdateTime, PostTime, sort
FROM egov_article
WHERE status =1 and id in(1,2,3)
ORDER BY IsTop DESC , sort DESC ,UpdateTime DESC


这个查询语句出现了filesort


CREATE TABLE `egov_article` (
`id` int(11) NOT NULL auto_increment,
`IsTop` tinyint(1) default '0',
`IsNew` tinyint(1) default '0',
`IsHead` tinyint(1) default '0',
`IsFocus` tinyint(1) default '0',
`Title` varchar(255) default NULL,
`TitleColor` char(7) NOT NULL COMMENT '标题颜色',
`TitleBold` tinyint(1) NOT NULL default '0' COMMENT '标题加粗',
`Keyword` varchar(255) default NULL,
`Description` text,
`Flag` varchar(50) default NULL COMMENT '旗帜,推荐设置',
`Thumb` varchar(255) default NULL,
`IsLink` tinyint(1) NOT NULL default '0' COMMENT '是否外部链接',
`Url` varchar(255) default NULL COMMENT '外部链接地址',
`CopyFrom` varchar(255) default NULL COMMENT '来源',
`Template` varchar(100) default NULL COMMENT '模版文件',
`AllowComment` smallint(6) NOT NULL default '1' COMMENT '允许评论,0:不允许,1:允许',
`status` tinyint(1) default '0' COMMENT '状态,0:未审核,1:已审核',
`PostTime` int(11) default NULL,
`UpdateTime` int(11) default NULL,
`Hits` int(11) default '0' COMMENT '浏览次数',
`sort` int(11) default '0' COMMENT '排序序号',
PRIMARY KEY (`id`),
KEY `status` (`status`,`id`,`IsTop`,`sort`,`UpdateTime`),
KEY `top` (`IsTop`),
KEY `sort` (`sort`),
KEY `updatetime` (`UpdateTime`)
) ENGINE=MyISAM AUTO_INCREMENT=333609 DEFAULT CHARSET=utf8;


请大牛解答下
...全文
148 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
珠海-天堂 2013-10-23
  • 打赏
  • 举报
回复
很好的案例。分析一下。 查询里的字段看起来都在索引里面了是不是? EXPLAIN SELECT id, IsTop, IsNew, Title, TitleColor, TitleBold, IsLink, Url, Thumb, info.Template, UpdateTime, PostTime, sort FROM egov_article WHERE status =1 and id in(1,2,3) ORDER BY IsTop DESC , sort DESC ,UpdateTime DESC KEY `status` (`status`,`id`,`IsTop`,`sort`,`UpdateTime`) 可以要清楚,MYSQL的索引使用时,从左到右依次匹配,当遇到第一个range的时候,后面的字段是用不到索引的。 针对这个案例,status=1 闭区间 id in(1,2,3) 范围比较,那么后面的三个ORDER BY的字段是用不到索引了。这就出现了filesort. 楼主把EXPLAIN信息全部贴出来,看看ken length的长度是不是`status`,`id`两个字段的长度和。
rucypli 2013-10-16
  • 打赏
  • 举报
回复
有文件排序未必就慢 你这个可以强制使用主键索引id select * from tb force index( primary key) where xxxx;

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧