繁体   English   中英

为什么按col排序时有索引,mysql为什么需要文件排序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM