私は実行に非常に長い時間がかかるクエリを持っています。ここでは、クエリです:インデックスを作成する列はどれですか?
SELECT *
FROM `posts`
WHERE `posts`.`id` IN (... MANY MANY DOZENS OF IDs ...)
ORDER BY `created_at` DESC;
は、私はちょうどid
上またはid
とcreated_at
の両方にインデックスを作成しますか?
私は実行に非常に長い時間がかかるクエリを持っています。ここでは、クエリです:インデックスを作成する列はどれですか?
SELECT *
FROM `posts`
WHERE `posts`.`id` IN (... MANY MANY DOZENS OF IDs ...)
ORDER BY `created_at` DESC;
は、私はちょうどid
上またはid
とcreated_at
の両方にインデックスを作成しますか?
ご質問の場合は、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で動作します。
IDが1つしかない場合は、なぜ再注文する必要がありますか? – FrankerZ
@FrankerZ。 。 。 'id'がユニークであれば、再注文する必要はありません。 –
両方でインデックスを作成できますが、基本的なアプローチには欠陥があります。代わりに、これらのIDをテーブルに挿入して結合する必要があります。 – bernie