*

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でユーザ定義定数を読みだす方法

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

記事を読む

no image

biosが起動しない。

おとといくらいから、うちのPCが起動しない。OSが起動しないだけじゃなくてBiosが起動しない。ファ

記事を読む

no image

google translate

もうね、すごいとしか。http://www.google.com/webelements/#!/tr

記事を読む

no image

eclipseのリソース名を変更する

ちょっとキョドったのでエントリー。 1. eclipse > エクスプローラー から名前を変更

記事を読む

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

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

記事を読む

no image

windows7のxamppでvirtual hostを設定する

忘れないように忘れてもいいようにエントリー。 タイトルの通りです。 c:/xampp/a

記事を読む

no image

ブログ更新情報をTwitterに流す、FeedBurnerの「Socialize機能」

タイトルの通り、ブログの更新情報をTwitterに流す方法。 結論から言うとFeedBurnaer

記事を読む

no image

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

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

記事を読む

no image

xoops cubeを入れてみた

かなり枯れたパッケージだが、xoops cubeを調べたのでエントリー。 Xoops と言われ

記事を読む

no image

PHPのpear インストールにて

今さらながらPEARを触ることに。以前に少しだけ触ったことがあって、「ダウンロードするだけでしょ?超

記事を読む

Google AD

Google AD

PAGE TOP ↑