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;
请大牛解答下
select * from tb force index( primary key) where xxxx;
查询里的字段看起来都在索引里面了是不是?
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`两个字段的长度和。