gpt4 book ai didi

mysql - 不使用索引的非常简单的mysql查询

转载 作者:可可西里 更新时间:2023-11-01 06:27:55 26 4
gpt4 key购买 nike

我的 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 中的工作方式的理解是错误的。

最佳答案

  1. 您正在选择所有行
  2. 您正在选择所有列

按照我上面说的-mysql估计使用full scan会更有效率。

要使用索引获取它,您需要添加一些 WHERE 以将其限制为合理的返回行数(比如 50)

关于mysql - 不使用索引的非常简单的mysql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17712319/

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