我的 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 中如何工作的理解是错误的。
- 您正在选择所有行
- 您正在选择所有列
按照我上面所说的 - mysql估计使用全扫描会更有效率。
要使用索引获取它,您需要添加一些WHERE
这会将其限制为合理的返回行数(例如 50)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)