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;
请大牛解答下

解决方案 »

  1.   

    有文件排序未必就慢 你这个可以强制使用主键索引id
    select * from tb force index( primary key) where xxxx;
      

  2.   

    很好的案例。分析一下。
    查询里的字段看起来都在索引里面了是不是?
    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 DESCKEY `status` (`status`,`id`,`IsTop`,`sort`,`UpdateTime`)可以要清楚,MYSQL的索引使用时,从左到右依次匹配,当遇到第一个range的时候,后面的字段是用不到索引的。针对这个案例,status=1  闭区间
    id in(1,2,3)  范围比较,那么后面的三个ORDER BY的字段是用不到索引了。这就出现了filesort.楼主把EXPLAIN信息全部贴出来,看看ken length的长度是不是`status`,`id`两个字段的长度和。