首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MyISAM表将文件排序与ORDER BY一起使用,为什么?

问MyISAM表将文件排序与ORDER BY一起使用,为什么?
EN

Stack Overflow用户
提问于 2012-06-06 20:46:43
回答 3查看 549关注 0票数 0

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

我的表格看起来像这样:

代码语言:javascript
复制
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

运行时

代码语言:javascript
复制
EXPLAIN SELECT * 
FROM  `test` 
ORDER BY sdf

mysql说它使用的是filesort,为什么?我需要做什么更改才能不使用filesort

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-06 20:58:56

FULLTEXT索引不表示排序,因此不能用于ORDER BY。

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

该索引将用于ORDER BY / LIMIT

代码语言:javascript
复制
CREATE INDEX ix_test_sdf ON test (sdf);

SELECT  *
FROM    test
ORDER BY
        sdf
LIMIT   10

LIMIT有一个特定的阈值,超过这个阈值优化器会更喜欢文件排序。

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

代码语言:javascript
复制
SELECT  *
FROM    test FORCE INDEX (ix_test_sdf)
ORDER BY
        sdf

如果你真的不想有一个文件排序。

票数 3
EN

Stack Overflow用户

发布于 2012-06-06 20:53:54

sdf上的全文索引不能用于ORDER BY操作(它们只能用于MATCH() ... AGAINST查询),这就是它在表上使用文件排序的原因。

解决方案是除了全文索引之外,在sdf上添加另一个常规索引。

票数 0
EN

Stack Overflow用户

发布于 2012-06-06 20:53:45

在sdf上添加索引。然后再次运行查询。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10914510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档