postgresqlデータベースにインデックスを作成する方法
ビットコインが取引停止になったり、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
関連記事
-
-
さくらインターネットでPEAR::MDB2とServices_Amazonを入れてみた
前回の続きで、PEAR::MDB2と、Services_Amazonをさくらインターネットに
-
-
wordpress plugin change the taxonomy when you suggest the time
1. at first, download Post Expirator.2.change code
-
-
WEBディレクター募集します
仕事でWEBディレクターが必要になりました。HTML/CSSコーディング、ディレクション経験あります
-
-
wordpressからbloggerに引越し
lolipopで使っているロリポプランは、DBが一つしか使用できない。もうちょっと有効に使えないかと
-
-
ファビコン(.ico)の作成方法
テーマを変更したついでと言ってはなんだけど、ファビコンの作成方法をメモしておきます。
-
-
開発の現場に行って来た
ひょんな事から、他社の開発の現場に行く事に。 念願だったT社に!書類選考で落ちたよT社! 久
-
-
WEBディレクター、WEBエンジニア募集してます。
いっしょにWEB制作やりましょう! クライアント駐在(派遣) 場所:都営大江戸線
-
-
JQueryのsliderでpagination機能を作ってみた
複数ページが存在するWEBサイトによく使われている機能として「ページネーション」があります。
-
-
オブジェクトとクラスについて
基本的なところをちょっと復習。 下記あたりが参考になったのでメモ。 http://www.k
-
-
WordPressをインストールしたら最初にやってることまとめ
仕事でWordpress使ってるけど、とりあえずすごく役に立ちました。ありがとうございます。個人的に