MySQL-按2列排序,不带文件排序

MySQL-按2列排序,不带文件排序,mysql,sql-order-by,Mysql,Sql Order By,我试图显示最新的“抽奖”新闻条目,但我想先显示未过期的条目。我还想先订购展示最新作品的 然而,无论我如何编写查询或为其编制索引,MySQL总是希望使用filesort SELECT F.sid, F.title, F.url, F.description, F.bodytext, F.img, F.url, F.submitted_by, F.category, F.ptime, F.expired, SUM(if(C.active = 1, 1, 0)) AS commentCount FRO

我试图显示最新的“抽奖”新闻条目,但我想先显示未过期的条目。我还想先订购展示最新作品的

然而,无论我如何编写查询或为其编制索引,MySQL总是希望使用filesort

SELECT F.sid, F.title, F.url, F.description, F.bodytext, F.img, F.url, F.submitted_by, F.category, F.ptime, F.expired,
SUM(if(C.active = 1, 1, 0)) AS commentCount
FROM News AS F
LEFT JOIN news_comments.comments AS C ON F.sid = C.postid
WHERE category = 'sweepstakes' AND F.sid
GROUP BY F.sid
ORDER BY F.expired, F.sid DESC
LIMIT 1, 8

+----+-------------+-------+------+-------------------------------+--------------+---------+-----------------------------+------+----------------------------------------------+
| id | select_type | table | type | possible_keys                 | key          | key_len | ref                         | rows | Extra                                        |
+----+-------------+-------+------+-------------------------------+--------------+---------+-----------------------------+------+----------------------------------------------+
|  1 | SIMPLE      | F     | ref  | category                      | category     | 98      | const                       |  158 | Using where; Using temporary; Using filesort |
|  1 | SIMPLE      | C     | ref  | get_comments                  | get_comments | 4       | News.F.sid                  |    1 | Using index                                  |
+----+-------------+-------+------+-------------------------------+--------------+---------+-----------------------------+------+----------------------------------------------+
2 rows in set (0.00 sec)
我有关于类别、sid和过期的索引。“expired”列包含1表示已过期,0表示未过期

可以用不同的方式重写此查询以避免文件排序吗

编辑:表结构

News | CREATE TABLE `News` (
`sid` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(80) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`url` varchar(80) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`description` varchar(160) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`bodytext` mediumtext CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`img` varchar(80) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`submitted_by` varchar(16) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`category` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`ptime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`expired` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`sid`),
KEY `category` (`category`,`sid`,`expired`)
) ENGINE=MyISAM AUTO_INCREMENT=1082 DEFAULT CHARSET=latin1

按两行或两列排序?是否存在真正的技术问题,或者您只是不喜欢“使用文件排序”标签?@Mayhem:这很重要,因为没有问题。你不知道这些旗帜是什么意思,但你想避开它们。严重缺乏知识的性能优化只是浪费时间。不管怎样,我已经说过了:1。此查询2不可能。优化已经起作用的东西是没有意义的well@zerkms:啊!我想是太多的博士后了。Postgres在解释输出中报告实际查询执行时间。@Mayhem:如果您在语法方面有任何问题-请在编写本文之前先查阅文档:如果您不能处理一个琐碎的
SHOW CREATE
sql-那么处理性能优化可能为时尚早?