Solved
PostgreSQLでORDER BYが遅い時にインデックスをどう貼ればいいか
Taro · 6/25/2026 · 51 views
created_atでソートして最新100件を取得するクエリが遅いです。created_atにインデックスは貼っているのですが速くなりません。
Taro · 6/25/2026 · 51 views
created_atでソートして最新100件を取得するクエリが遅いです。created_atにインデックスは貼っているのですが速くなりません。
WHERE句の条件とORDER BYを両方使っている場合、created_at単体のインデックスだけでは不十分なケースがよくあります。EXPLAIN ANALYZEを実行して、Sort処理が発生していないか、Index Scanではなく Seq Scan になっていないかをまず確認してください。
よくある原因は「WHERE tenant_id = 'xxx' ORDER BY created_at DESC LIMIT 100」のようなクエリで、tenant_idの絞り込みとcreated_atのソートを1つのインデックスでまかなえていないケースです。
この場合、複合インデックスを作ると改善することが多いです。
CREATE INDEX idx_questions_tenant_created ON questions (tenant_id, created_at DESC);
こうすることで、tenant_idで絞り込んだ後の並び順がすでにインデックスの物理的な順序と一致するため、PostgreSQLが追加のソート処理をせずに済むようになります。EXPLAIN ANALYZEの結果でSortというノードが消えて、Index Scanだけで完結するようになっていれば改善できている証拠です。
✓ This question has been solved