我的 mySQL 表的排序不使用索引,我不知道为什么。
我有:
CREATE TABLE IF NOT EXISTS `test` (
`a` int(11) NOT NULL,
`b` int(11) NOT NULL,
KEY `kk` (`a`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
还有这个:
EXPLAIN SELECT *
FROM test
ORDER BY a
还有这个
EXPLAIN SELECT *
FROM test
USE INDEX ( kk )
ORDER BY a
给了我这个:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE test ALL NULL NULL NULL NULL 10009 Using filesort
我不想看到这个文件排序,并使用键 kk 对我的表进行排序。我究竟做错了什么?
谢谢你的帖子,他们回答了我的问题!但是,现在我不明白“表扫描”和“文件排序”是什么意思?即使我选择表的所有字段和所有行,通过在 O(n) 中遍历该列的索引的内部树(然后在表中查找)按一列对该表进行排序不是更快吗在 O(1) 中为每一行归档请求的额外列 => 索引文件将每一行的物理位置存储在表文件中,或者?),而不是通过快速排序在 O(n * log n) 中进行排序(可能)在表文件中随机存储行,而不触及索引?我想我对索引如何在 mySQL 中工作的理解是错误的。