PostgreSQLは、リリースごとにクエリオプティマイザが賢くなっている。新しいバージョンを導入する際はそのメリットを生かしていこう。8.3では、ORDER BYとLIMITの組み合わせという、Webアプリケーションなどで頻繁に出てくるパターンが改良された。

次のようなSQL文を考える。

SELECT * FROM accounts ORDER BY abalance LIMIT 10;

従来は、まずORDER BYによる並び替えをするためにソート処理を行い、次にその先頭から10件を取り出すということを行っていた。

8.3では、10件分しかソートを行わないので、格段に高速化される。

筆者の行ったテストでは、pgbenchで生成した1,000万件のデータに対して上記SQLを実行した場合、8.2では113.7秒かかるのに対し、8.3ではわずか7.8秒で完了した。14倍以上も高速化されたことになる。

上記のSQL文は、Webアプリケーションなどでは頻繁に発生するパターンであ る。8.3を導入することにより、恩恵を受けるアプリケーションは結構多いの ではないだろうか。

なお、残念ながらこの高速化は、

SELECT * FROM accounts ORDER BY abalance LIMIT 10 OFFSET 10;

のように、OFFSET付きの場合には適用されないので注意が必要だ。