0

選択した行を で並べ替えると、mysql がファイルソートを使用するのはなぜORDER BY xですか?

私のテーブルは次のようになります。

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か?

4

3 に答える 3

3

FULLTEXTインデックスは順序を維持しないため、 には使用できませんORDER BY

ただし、 にBTREEインデックスがあったとしてsdfも、テーブルを順番にスキャンして並べ替えるよりも、ループでテーブルを検索する方が一般的にコストがかかるため、おそらく使用されないでしょう。

インデックスは次の場合に役立ちます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

本当にファイルソートをしたくない場合。

于 2012-06-06T12:58:55.643 に答える