MySQL-按2列排序,不带文件排序
我试图显示最新的“抽奖”新闻条目,但我想先显示未过期的条目。我还想先订购展示最新作品的 然而,无论我如何编写查询或为其编制索引,MySQL总是希望使用filesortMySQL-按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
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-那么处理性能优化可能为时尚早?