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
関連記事
-
SVNリポジトリでコミットできなかった件
ベンダーさんに、先日立てたSVNリポジトリにコミットできないと連絡いただき、調べたところ、権限が
-
cakephpでユーザ定義定数を読みだす方法
サイトを作るにあたって、定数を使いたいときがよくあります。 サイト上のある数値に変更があっ
-
stay hungry stay foolish
apple http://www.apple.com/stevejobs/ He die
-
さくらでcakephpを使って500internal server errorが出る場合の対応
こんにちは! 今日は節分ですね。自分の子供のころ、節分と言えば豆まきだったわけですが、近ご
-
CakePHPでFacebook-PHP-SDKを使ってFacebookログインするアプリの作り方
こんにちは! 昨日は東京では45年ぶりに大雪が降りましたね! 自分の家の方でも雪が2
-
佐々木俊尚さんの講演:ソーシャルとクラウドとグローバル
11月17日、Hitachi Open Middleware World Cloud Day に参
-
img画像に隙間(空間)ができる件
何度か経験してそのたびにイラッときたので自分用にエントリー。 スタイルシートで下記のように記述
-
WEBディレクター募集します
仕事でWEBディレクターが必要になりました。HTML/CSSコーディング、ディレクション経験あります
-
xamppでSSLの設定をする
以前、xamppでvirtual host の設定をしましたが、xamppを使ってて「あれ、SS
-
windows7のxamppでvirtual hostを設定する
忘れないように忘れてもいいようにエントリー。 タイトルの通りです。 c:/xampp/a