*

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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

ログインアカウント

cakephpでviewからログイン判定してアカウント表示する機能

cakephpのログイン機能を、viewから判定させたかったので調べてみました。 よく

記事を読む

cakephp

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

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

記事を読む

WEBサイトの表示速度をスピードアップする方法

サイトの表示が遅いので、いくつかツールを使ってチューニングすることにしました。 まず初めに

記事を読む

アマゾンのクラウド(AWS)を使ってみる その2

前回、アマゾンのクラウド(AWS)を使ってみる で何も無い所からEC2を立ち上げましたが、そのあ

記事を読む

no image

stay hungry stay foolish

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

記事を読む

no image

佐々木俊尚さんの講演:ソーシャルとクラウドとグローバル

11月17日、Hitachi Open Middleware World Cloud Day に参

記事を読む

Google Analyticsで毎日チェックするべき4つの項目

こんにちは! まだまだ寒い日が続きますねー。皆様ご自愛ください。 さて、通常なにかし

記事を読む

no image

wordpressからbloggerに引越し

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

記事を読む

PVが3000を超えたので3か月やったこととを公表します

ウクライナ情勢が緊迫している昨今、皆様お元気でしょうか? 自分のブログには大きな変化がありました。

記事を読む

no image

オラクル、「OpenOffice.org」コードの寄贈を表明 – CNET Japan

オラクル、「OpenOffice.org」コードの寄贈を表明 - CNET Japanオープンの流れ

記事を読む

Google AD

Google AD

PAGE TOP ↑