KEEPバッファにインデックス(INDEX)を置くべきかどうか


どうも。今回はKEEPバッファにインデックスを置くべきかどうか、について考えてみました。

以前、↓の記事でKEEPバッファにデータを格納しておくというのを紹介していました。

無駄をなくしてSQLを高速化する方法

先日、このページをご覧になった方から質問で、「インデックスをKEEPバッファに置かない理由は何か?」という質問を受けたので、私の考えを紹介したいと思います。

インデックスもKEEPバッファに置けば良い

ズバリ、インデックスもKEEPバッファに置けば良いのではないでしょうか。KEEPバッファってバッファキャッシュ、つまりデータベースサーバのメモリ領域を使うことになります。もしメモリに余裕がある場合や、どうしても高速化したいSQLの場合は置いても良いと思います。

ただ、多くの場合では、性能のボトルネックになっているのは、データアクセスだと思います。そこで、以前の記事ではデータのみKEEPバッファに置いておくように紹介しました。

もちろん、インデックスを置ければ、インデックスのアクセスも速くなります。ただ、インデックスがボトルネックになることは少ない、そして、貴重なメモリを出来る限り節約しながら使うと言う観点から、データのみをKEEPバッファに置いていました。

注意点

KEEPバッファは事前に、何GB確保しておくか、設定する必要があります。そしてKEEPバッファとして確保した領域は通常のバッファキャッシュとしては利用され無かったと思います。(※この辺りは記憶が曖昧ですので要確認でお願いします。)

と言うわけで、メモリに余裕があれば、インデックスも置いてみてください。
インデックスのアクセスがボトルネックになっているようなSQLであれば、大きな改善が見込めると思います。

最後に

最後までお読みいただきありがとうございます。

SQLのチューニングについては、「SELECT文のSQLチューニング方法まとめ」で詳しく解説していますので、ぜひ参考にしてください。