カテゴリー別アーカイブ: データベース

PostgreSQLベンチマーク 1000万+レコードからのSELECT

っていうテーブルがあって、

  • 1000万件はhead_idが1じゃない
  • 1万3千件はhead_idが1

という内容で「EXPLAIN ANALYZE SELECT * FROM body WHERE head_id = 1 ORDER BY body_id DESC;」でベンチマークをとってみました。

  • インデックスをはらない
  • head_id のみインデックスをはる
  • head_id, body_id の複合インデックスをはる(ソートが発生しなくなるんじゃないかなと思って)

の3つの条件でやってみたけど、2番目が最も高速で25ms前後でした。(Total runtime: 25.632 ms)

クエリプランを見るとbody_idでソートしてからdraft_id = 1の条件でインデックススキャンと書かれているけど、データ数が11万3000件の場合もほぼ同じ結果(25ms前後)だったので、bodyテーブルのhead_id != 1のデータ数がさらに増加しても性能の劣化はないと思います。

もっと良いやり方あるぜ!という場合は教えてくだしあ!