我有一些推荐表
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
。
为什么无法从索引执行排序? 有问题的东西吗?
感谢)
答案 0 :(得分:1)
key
列显示使用的索引,它为空。使用位置仅表示您使用WHERE to restrict the rows。对于您的查询
ALTER TABLE testimonials ADD KEY(status,t_order )
是最好的索引,假设你有足够的行,所以索引是有意义的。(对于非常少的行,表扫描比索引更快。)