【特集】

期待度大のバージョンアップ - PostgreSQL 8.3の改良点を徹底分析

11 ORDER BYの高速化

    石井達夫  [2007/11/20]

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

    関連したタグ

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン