gpt4 book ai didi

mysql - 当order by col有索引时,为什么mysql需要filesort?

转载 作者:行者123 更新时间:2023-11-29 21:38:37 25 4
gpt4 key购买 nike

我创建了一个这样的表:

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% 的数据)感兴趣时,使用索引才有意义。或者,当然,如果您只对索引列感兴趣。

关于mysql - 当order by col有索引时,为什么mysql需要filesort?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34718272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com