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
関連記事
-
-
wordpressのiphone用プラグイン
Wptouchていうプラグインがあったのでいれてみた。感想は、「ん~、まあこんなものか」です。フリー
-
-
【wordpress】buddypressでの子テーマの作リ方
先日BuddyPressのインストール方法をお伝えしましたが、インストールしたままテーマを変
-
-
【どうしてこうなった!?】このブログの直帰率が1%を切りました【自分史上初】
以前のエントリーで、このブログの直帰率が80%から20%に激減したことを報告しました。
-
-
【解説】Googleウェブマスターツールの使い方
サイトの分析やアクセス解析のツールと言えばGoogleAnalyticsですよね。 このブ
-
-
SVNリポジトリのリプレース(とeclipseの設定)
SVNリポジトリのリプレースを行ったのでエントリー。 1.リポジトリをdump svn
-
-
さくらでcakephpを使って500internal server errorが出る場合の対応
こんにちは! 今日は節分ですね。自分の子供のころ、節分と言えば豆まきだったわけですが、近ご
-
-
stay hungry stay foolish
apple http://www.apple.com/stevejobs/ He die
-
-
さくらインターネットでPEARを使ってみる
以前、自分が持っている書籍を管理するアプリ「ブックマネージャー」を作ってアップしてたのですが
-
-
PHPのpear インストールにて
今さらながらPEARを触ることに。以前に少しだけ触ったことがあって、「ダウンロードするだけでしょ?超
-
-
AmazonEC2にcakephp2入れたときにエラーが出た件
たぶんEC2にはcakephpをこれからも入れるだろうから自分用にエントリー。 Amazon


RSS