gpt4 book ai didi

mysql - MyISAM 表使用带有 ORDER BY 的文件排序,为什么?

转载 作者:行者123 更新时间:2023-11-29 08:51:58 25 4
gpt4 key购买 nike

当我使用 ORDER BY x 对选定的行进行排序时,为什么 mysql 使用文件排序?

我的 table 看起来像这样:

CREATE TABLE `test` (
`sdf` varchar(100) NOT NULL,
`sdf33` varchar(100) NOT NULL,
KEY `sdf_2` (`sdf`),
FULLTEXT KEY `sdf33` (`sdf33`),
FULLTEXT KEY `sdf` (`sdf`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

运行时

EXPLAIN SELECT * 
FROM `test`
ORDER BY sdf

mysql说它正在使用filesort,为什么?我需要更改什么才能不使用 filesort

最佳答案

FULLTEXT 索引不保留排序,并且不能用于 ORDER BY

但是,即使您在 sdf 上有一个 BTREE 索引,它也很可能不会被使用,因为在循环中进行表查找通常成本更高而不是按顺序扫描表并对其进行排序。

索引可用于ORDER BY/LIMIT:

CREATE INDEX ix_test_sdf ON test (sdf);

SELECT *
FROM test
ORDER BY
sdf
LIMIT 10

LIMIT 有一个特定的阈值,超过该阈值优化器会首选文件排序。

您可以强制优化器使用索引:

SELECT  *
FROM test FORCE INDEX (ix_test_sdf)
ORDER BY
sdf

如果你真的不想进行文件排序。

关于mysql - MyISAM 表使用带有 ORDER BY 的文件排序,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10914510/

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