2

ORDERBYの日時列を持つテーブルがあります。何をするにしても、EXPLAINから「whereusing;usingfilesort」を取得し続けます。

filesortを使用しないように日時列でORDERBYを取得する方法はありませんか?

クエリは非常に単純で、次のようになります。

SELECT * FROM table1 WHERE creator_id = 1 AND user_id != 1 ORDER BY created DESC LIMIT 5

indexはcreator_idとuser_idにあります。基本的に常に一意であるため、createdにインデックスを付ける理由はありません。したがって、すべてのアイテム、つまりテーブルと同じ大きさのインデックスが作成されます。

編集:私は作成されたものにもインデックスを付けてみましたが、同じ結果です。

4

1 に答える 1

1

に複合インデックスを作成する(creator_id, created)と、クエリははるかに高速に動作するはずです。

クエリプランナーは、インデックスの最初の部分を使用しますcreator_id。WHERE制約を満たすため、およびcreatedソートの2番目の部分を使用します。

于 2013-02-02T08:16:26.460 に答える