PostgreSQLのSQLチューニングに関しては多くの情報がありますが、多くの場合sshなどでベンチマークを行ったり、PostgreSQLサーバーの設定ファイルを変更するなど、レンタルサーバーではなかなか検証が難しい内容が多いようです。

そこで、ちょっと乱暴な部分も多いのですが、初心者プログラマ向けにパフォーマンスに大きな悪影響を及ぼす事例のみをご紹介します。

以下で説明する項目は改善すればかなり効果があります。

order byにもインデックスを設定するべし

初心者の多くは、where句で指定するフィールドにはインデックスを指定しても、order byに指定するフィールドに指定し忘れていることが多いようです。

実は、これを忘れるとwhereにかけ忘れるよりも、大きなパフォーマンス低下を招きます。

count()やmax()は禁止

count()やmax()関数はとても便利ですが、これを使用するとPostgreSQLは全てのデータをスキャンします。

数百万件のデータになると致命的に痛いことになりますので、別のテーブルに総数や最大値を保存しておく等、なるべくcount()やmax()を使わないように工夫しましょう。

limit及びoffsetは絶対に指定するべし

どんなWEBアプリケーションでも、1ページに表示する件数に限りがあります。

手を抜かないでlimitやoffsetは必ず指定するようにしましょう。

日付や時刻に注意

日付や時刻型のフィールドに対してwhere条件を使用する場合、関数を使っていたりbetweenを使用していなかったりすると、インデックスが適切に使用されません。

めんどくさいのですが、「関数インデックス」やbetweenをがんばって活用しましょう。

where句に指定する順番をチェック

SQLのwhere句にANDで複数の条件が指定されている場合、PostgreSQLは左から順に絞り込んでいきます。

したがって、検索結果が少なくなるであろう条件ほど左に持っていくなどの工夫をすることで、劇的に早くなったりします。