我正在尝试优化在一列上使用> =比较的查询,并使用不同的列进行排序。以下示例查询:
SELECT table1.title FROM table1 WHERE table1.date >= '2014-01-16 22:04:16' ORDER BY table1.vote_count DESC LIMIT 10 OFFSET 0;
我还没有找到避免使用filesort的方法; MySQL将检索与> =比较匹配的所有行,然后使用filesort。这是有问题的,因为日期范围可能非常大并且包含许多行。
SHOW CREATE TABLE table1;
| table1 | CREATE TABLE `table1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(50) NOT NULL,
`date` datetime DEFAULT NULL,
`like_count` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `date` (`date`),
) ENGINE=InnoDB AUTO_INCREMENT=685 DEFAULT CHARSET=utf8 |
下面的EXPLAIN SELECT:
EXPLAIN SELECT table1.title FROM table1 WHERE table1.date >= '2014-01-16 22:04:16' ORDER BY table1.vote_count DESC LIMIT 10 OFFSET 0 \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: user_playlists
type: range
possible_keys: date
key: date
key_len: 9
ref: NULL
rows: 14
Extra: Using where; Using filesort
1 row in set (0.03 sec)