2016-07-26 4 views
2

私は実行に非常に長い時間がかかるクエリを持っています。ここでは、クエリです:インデックスを作成する列はどれですか?

SELECT * 
FROM `posts` 
WHERE `posts`.`id` IN (... MANY MANY DOZENS OF IDs ...) 
ORDER BY `created_at` DESC; 

は、私はちょうどid上またはidcreated_atの両方にインデックスを作成しますか?

+2

両方でインデックスを作成できますが、基本的なアプローチには欠陥があります。代わりに、これらのIDをテーブルに挿入して結合する必要があります。 – bernie

答えて

1

ご質問の場合は、posts(id)のインデックスのみが最適です。 idがリストに1つしかない場合は、posts(id, creaated_at)を実行できます。

order byは、ほとんどの時間を取っている場合は、このバージョンで試すことができます:いくつかの状況下

select p.* 
from (select p.* 
     from posts p 
     order by created_at desc 
    ) p 
where p.id in (. . .); 

をあなたはposts(created_at)にインデックスを持っている場合、これはソートできない場合があります。私は順序付けられた結果を返すサブクエリに依存しているので、私はこの策定に興奮していません。実際にはMySQLで動作します。

+0

IDが1つしかない場合は、なぜ再注文する必要がありますか? – FrankerZ

+0

@FrankerZ。 。 。 'id'がユニークであれば、再注文する必要はありません。 –

関連する問題