[英]Why does mysql require filesort when the order by col has an index?
我创建一个像这样的表:
CREATE TABLE `testtable` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`created_at` datetime NOT NULL,
`updated_at` timestamp NOT NULL,
PRIMARY KEY (`id`),
KEY `test_updated_at_index` (`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
选择的说明说它正在使用文件排序:
mysql> explain select * from testtable order by updated_at;
+----+-------------+-----------+------+---------------+------+---------+------+------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+------+---------------+------+---------+------+------+----------------+
| 1 | SIMPLE | testtable | ALL | NULL | NULL | NULL | NULL | 1 | Using filesort |
+----+-------------+-----------+------+---------------+------+---------+------+------+----------------+
为什么不使用索引? 另外,如果我只是删除created_at列,那么它确实使用了索引!
为什么添加单个附加列会使mysql忘记如何使用索引?
我如何更改表,以便mysql即使使用附加列也可以使用索引进行排序?
没有WHERE子句,因此您从表中读取了所有记录。 在大多数情况下,即使您之后必须对数据进行排序,也比直接遍历索引并分别选择每个记录要快得多,直接读取表的方法更快。
仅当您仅对表的一小部分感兴趣(例如表数据的2%)时,才有意义使用索引。 或者,当然,如果您仅对索引列感兴趣。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.