*

postgresqlデータベースにインデックスを作成する方法

公開日: : 最終更新日:2014/05/29 システム, テクニック , , ,

PostgreSQL-9

ビットコインが取引停止になったり、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


Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

no image

タグクラウド機能を付加。

右側のナビにタグクラウドを付けた。どうでしょうか。それにしてもワードプレスってタグが簡単だよね。wp

記事を読む

no image

facebookのビジョンはセマンティックか – ライフログとopen graph

facebookが開発者カンファレンス(f8)でアップデートを発表した。 「また何か機能付

記事を読む

cakephpでユーザ定義定数を読みだす方法

サイトを作るにあたって、定数を使いたいときがよくあります。 サイト上のある数値に変更があっ

記事を読む

no image

WordPress plugin cooperate to EC-CUBE

downloadhttp://code.google.com/p/now-on-sell/it co

記事を読む

no image

ロリポップ+お名前.comで独自ドメイン取得

onamae.com で独自ドメイン取得しました。 そのときのメモ。 1.lollipo

記事を読む

【解説】Googleウェブマスターツールの使い方

サイトの分析やアクセス解析のツールと言えばGoogleAnalyticsですよね。 このブ

記事を読む

no image

Pear::pager と TwitterBootstrap をマッシュアップしてみた

前回に引き続き、WEBアプリをカスタマイズしてみました。 DB使って商品登録をしてると

記事を読む

no image

stay hungry stay foolish

apple http://www.apple.com/stevejobs/ He die

記事を読む

no image

ec-cubeで欲しい機能

仕事で、ec-cubeを触っている。どこの企業でも同じだと思うが、ec-cubeを使っているとカスタ

記事を読む

no image

WordPressをインストールしたら最初にやってることまとめ

仕事でWordpress使ってるけど、とりあえずすごく役に立ちました。ありがとうございます。個人的に

記事を読む

Google AD

Google AD

PAGE TOP ↑