postgresqlデータベースにインデックスを作成する方法
ビットコインが取引停止になったり、LINEがスタンプを自由に作れるようにしたり、何かとにぎやかな業界ですが、そんなにぎやかさを横目に、粛々とDBのチューニングしてます。
前回に引き続き、WEBサイトの表示速度をスピードアップさせる方法です。
前回はHTMLや画像やCSSといったファイルを、ブラウザのキャッシュを利用したり圧縮を有効にしたりすることで高速化を図ってきました。
それだけではまだスピードが不足していると感じたので、さらにスピードアップを図ります。
PageSpeed Insightsの結果で「サーバの応答速度を短縮する」という項目があります。
「サーバの応答速度を短縮する」とはどういうことか?
下記のページを見ると、サーバの応答速度を遅らせる要因がさまざまにあることを教えてくれます。
Improve Server Response Time
https://developers.google.com/speed/docs/insights/Server
- 遅いアプリケーションロジック
- 遅いデータベースクエリ
- ルーティング
- フレームワーク
- ライブラリ
- CPUリソース不足
- メモリ枯渇
データベースにインデックスを作成する
フレームワークも使っているし、ハード的なリソースも不足していると言えばしているし、そもそもアプリケーションロジックが遅い・・・と自分のサイトで疑わしいところは色々あるのですが、今回は「遅いデータベースクエリ」に注目します。
遅いデータベースクエリを改善するにはどうするか?
データベースにインデックスを張る方法に目を向けてみます。
1.遅いクエリを選定する
前回のエントリーで、postgresqlのスロークエリを取得する方法をポストしました。
まずこの方法で遅いクエリがどれか選定します。ここでは複数クエリを出しておきます。
2.よく使われる部分を抜き出す
複数のクエリを見て、重複している部分があれば、その部分を抜き出します。
重複している部分は言い換えると「良く使われる部分」ということです。
だから重複するんですね。
3.カラムを指定する
重複している部分が判明したら、どのカラムが関係しているかを確認します。
ここが勘所です。基本的にはWhere句で検索条件になっているようなカラムが有力ですが、それ以外にもいくつかあります。
- Where句で検索条件になっているカラム(前方一致検索は除く)
- ORDER BYの対象になっているカラム
- GROUP BYの対象になっているカラム
- 重複が少ないカラム
- 抽出結果が少ないカラム
※注意点として、「重複の多いカラムにはあまり意味がない」ということがあります。
たとえば、性別などのデータにはほとんど効果がないようです。
重複の少ないカラムが有効なんですね。
4.インデックスを張る
インデックスを張るカラムを決めたら、さっそく張ってみます。
基本的に下記のように張ります。
CREATE INDEX index_name ON table_name (column_name);
インデックスが張れたか、確認してみます。
確認は次のようなpsqlコマンドです。
\di
これで登録済みのインデックス一覧が確認できます。
試してみる
これでサイトを再び見てみましょう。
早くなってたらガッツポーズ。
早くなってなかったら、その部分が原因ではなかったということです。
SQLクエリをもう一度調べてみて、上記1.~4.を繰り返します。
ちなみに、インデックスを削除する方法は下記の通りです。
DROP INDEX name index_name;
どうでしょう?早くなりましたか~?
Google AD
関連記事
-
WEBディレクター募集します
仕事でWEBディレクターが必要になりました。HTML/CSSコーディング、ディレクション経験あります
-
PVが3000を超えたので3か月やったこととを公表します
ウクライナ情勢が緊迫している昨今、皆様お元気でしょうか? 自分のブログには大きな変化がありました。
-
img画像に隙間(空間)ができる件
何度か経験してそのたびにイラッときたので自分用にエントリー。 スタイルシートで下記のように記述
-
vertical-alignで画像とテキストの位置を垂直方向で揃える
これも自分のリマインダー用としてエントリー。 画像とテキストが同じ行に並んでいて、垂直
-
cakephp2にACLプラグインを入れてみた
cakephpで、ユーザーによって権限やアクセスを変えたりする方法を調べてたら、それ用のプラ
-
xamppでSSLの設定をする
以前、xamppでvirtual host の設定をしましたが、xamppを使ってて「あれ、SS
-
サーバを変更したらアクセス数が落ちた件
サーバを変更した レンタルサーバをロリポップからさくらに乗り換えました。 (とは言ってもまだ
-
composerでcakephpをインストールしてプロジェクトを始めてみる
こんにちは!今日も寒いです。 この時期になると気になってくるのが花粉症です。 自分は花粉
-
さくらインターネットでPEAR::MDB2とServices_Amazonを入れてみた
前回の続きで、PEAR::MDB2と、Services_Amazonをさくらインターネットに
-
SVNリポジトリのリプレース(とeclipseの設定)
SVNリポジトリのリプレースを行ったのでエントリー。 1.リポジトリをdump svn