MySQL仍然使用FileSort按索引排序

时间:2016-03-03 13:37:13

标签: mysql

我有一些推荐表

CREATE TABLE IF NOT EXISTS `testimonials` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `description` text COLLATE utf8_unicode_ci NOT NULL,
  `user` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `status` enum('active','test','inactive','') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'active',
  `t_order` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `t_order` (`t_order`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=26 ;

还有一个简单的任务:启用手动排序。

SELECT查询显示:

mysql> EXPLAIN SELECT t_order, id, title, description FROM testimonials WHERE status = 'active' ORDER BY t_order DESC;

输出:

| id | select_type | table        | type | possible_keys | key  | key_len | ref  | rows | Extra                       |

|  1 | SIMPLE      | testimonials | ALL  | NULL          | NULL | NULL    | NULL |   23 | Using where; Using filesort |

ORDER BY使用了索引字段,但EXPLAIN仍显示Using filesort

为什么无法从索引执行排序? 有问题的东西吗?

感谢)

1 个答案:

答案 0 :(得分:1)

key列显示使用的索引,它为空。使用位置仅表示您使用WHERE to restrict the rows。对于您的查询

ALTER TABLE testimonials ADD KEY(status,t_order )

是最好的索引,假设你有足够的行,所以索引是有意义的。(对于非常少的行,表扫描比索引更快。)