*

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

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

WP-SpamFree by Pole Position Marketing

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

関連記事

no image

お名前ドットコムとDNSサーバ構築

以前話題にしたサーバ構築の件、DNSサーバとmailサーバを立てる事がなくなった。DNSサーバはお名

記事を読む

no image

今頃知りました。php

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

記事を読む

さくらインターネットでPEARを使ってみる

以前、自分が持っている書籍を管理するアプリ「ブックマネージャー」を作ってアップしてたのですが

記事を読む

cakephp

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

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

記事を読む

no image

オブジェクトとクラスについて

基本的なところをちょっと復習。 下記あたりが参考になったのでメモ。 http://www.k

記事を読む

no image

zenphotoを入れてみる

これまでの写真データ管理にはGoogleのWEBアルバムを使ってきたが、無料で使えるのは1GBまでだ

記事を読む

no image

img画像に隙間(空間)ができる件

何度か経験してそのたびにイラッときたので自分用にエントリー。 スタイルシートで下記のように記述

記事を読む

【体験談】6年間禁煙を続けられた自分の、禁煙の始め方

4月1日から消費税が8%になり、日用品への影響が少しずつ出てきているころです。 自分はお酒

記事を読む

no image

stay hungry stay foolish

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

記事を読む

no image

WordCampTokyo2011行ってきた

WordCampTokyo2011 http://2011.tokyo.wordcamp.

記事を読む

Google AD

Google AD

iPhone6が来ました。アップルのサポートは未だ健在だったというお話。

アップルは製品だけじゃなくて、サポートの対応にまでその企業哲学

iphone6にするか、iphone6plusにするか、まだ決めなくてもいい方法

iphone6が発表されましたね。iwatchは来年に持越しで

パパも2歳になったよ

早いもので子供が2歳になりました。 年を取るごとに年月が早く

転職して新しい職場で仕事始めました

1か月以上もブログを放置してましたが、私は元気です。 むしろ

6月末で現職を退職します

ご存知の方もいらっしゃると思いますが、6月末で現職を退職するこ

→もっと見る

PAGE TOP ↑