PostgreSQL 9.2 の Index Only Scan

PostgreSQLを使って、最初にあれ、、って思ったのが、インデックスがあるテーブルのSELECT COUNT(*)で、インデックスが使われないことでした。
(その前はMySQL使っていたので、インデックスがあれば、そっちを使う(テーブルよりインデックスを読みだした方が、サイズが少なくて済む)感覚でいたためです)

PostgreSQLの9.2より前では、MySQLなどのように、インデックスのスキャンだけで完了するような仕組みはない(Index Scanは、インデックス→テーブルといった動きになる)ので、SELECT COUNT(*)でインデックスが使われず、テーブルが参照(Seq Scan)されていました。


9.2でIndex Only Scanが入ったことによって、いろんなとこで効いてきそうな気がします。
テーブルを参照しなくて済む場面が増えれば、単純にI/Oが減るだろうっていうのと、インデックスがキャッシュに残る可能性が増えるので、特に大きなデータを扱うような場合に、かなり効いてくるのではないのかなと。