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付きの場合には適用されないので注意が必要だ。