*

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

wordpress plugin change the taxonomy when you suggest the time

1. at first, download Post Expirator.2.change code

記事を読む

no image

wordpressのiphone用プラグイン

Wptouchていうプラグインがあったのでいれてみた。感想は、「ん~、まあこんなものか」です。フリー

記事を読む

no image

wordpressからbloggerに引越し

lolipopで使っているロリポプランは、DBが一つしか使用できない。もうちょっと有効に使えないかと

記事を読む

no image

zenphotoを考え始める

googleのwebアルバムを使っていて、こりゃ便利じゃわい、と思ってたけど、結局完全に無料じゃない

記事を読む

no image

WEBという革命

自分がインターネットと出会ったのは14~15年前だが、海外に行くことがあって本当にネットの便利さ

記事を読む

cakephp

cakephpでPHPのタイムゾーン設定してないとエラーが出る件

ロリポップからさくらにサーバを変えたのは先日のエントリーの通りですが、サーバ環境が違うことでca

記事を読む

【アフィリエイト】WordPressプラグイン「AmazonJS」をインストールしてみました

ずん飯尾という芸人さんがいます。 中でも「現実逃避シリーズ」がプチブレイクしていて、現実離

記事を読む

no image

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

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

記事を読む

no image

今頃知りました。php

http://www.php.net/manual/ja/oop5.intro.phpabstrac

記事を読む

no image

stay hungry stay foolish

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

記事を読む

Google AD

Google AD

PAGE TOP ↑