2

編集: テストするためだけにクエリを簡単にしました:

select *
from table1 where date >= '2012-02-02' order by date, col_2 desc

date と col_2 に複合インデックスがありますが、クエリで説明すると次のように表示されます。

+----+-------------+------------------+-------+--------------------------+-----------------+---------+------+------+-----------------------------+
| id | select_type | table            | type  | possible_keys            | key             | key_len | ref  | rows | Extra                       |
+----+-------------+------------------+-------+--------------------------+-----------------+---------+------+------+-----------------------------+
|  1 | SIMPLE      | table1           | range | col_2_date, date         | col_2_date      | 4       | NULL | 4643 | Using where; Using filesort |
+----+-------------+------------------+-------+--------------------------+-----------------+---------+------+------+-----------------------------+

列 col_2 と date にインデックスがある場合、mySQL が filesort を使用するのはなぜですか? どうすればそれを防ぐことができますか?

4

1 に答える 1

1

答えは、インデックスを作成したのと同じ順序で結果を並べることです。たとえば、インデックスが (col_1, col_2) の場合は、or を使用し、... order by col_1 desc, col_2 descor... order by col_1 asc, col_2 ascを使用しません。... order by col_1 asc, col_2 descorder by col_2, col_1

于 2012-11-22T16:53:55.547 に答える