可能我错过了一些愚蠢的事情......显然MySQL 5.1仍然在做一个Filesort,即使有一个索引与ORDER BY子句中的列完全匹配.要在此发布,我已经过度简化了数据模型,但问题仍然存在:
表定义:
CREATE TABLE `event` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`owner_id` int(11) DEFAULT NULL,
`date_created` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `owner_id` (`owner_id`),
KEY `date_created` (`date_created`),
CONSTRAINT `event_ibfk_1` FOREIGN KEY (`owner_id`) REFERENCES `user_profile` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
我的问题是,一个简单的SELECT事件显示"正在使用filesort":
explain select * from event order by date_created desc;
Run Code Online (Sandbox Code Playgroud)
并且查询的结果解释了:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE event ALL NULL NULL NULL NULL 6 Using filesort
Run Code Online (Sandbox Code Playgroud)
有没有办法让这种类型的查询使用执行filesort的索引insteas? …