第4回:インデックスの活用によるチューニング (1/2)

まるごと PostgreSQL!
PostgreSQLチューニング実践テクニック

第4回:インデックスの活用によるチューニング

著者:石井達夫(ISHII, Tatsuo)   2005/6/8
1   2  次のページ
インデックスの活用

   インデックス(index)は検索処理を高速化するデータ構造です(日本語で「索引」と呼ばれることもあります)。インデックスを使うと、検索処理が高速化する一方、更新処理時のオーバーヘッドが増加して、処理速度に悪影響を与えます。したがって、インデックスは作ればよいというものではありません。必要十分なインデックスを作ることが基本です。

   PostgreSQLにはB-treeインデックス、ハッシュインデックス、R-treeインデックスなどがあります。R-treeインデックスは幾何データ型専用です。デフォルトで使用されるのはB-treeインデックスです。実装が一番洗練されているので、特に理由のない限りB-treeインデックスの使用をお勧めします。本稿でも以下「インデックス」と言えばB-treeインデックスを指すことにします。


B-treeインデックスとは

   B-treeインデックスを有効に利用するためには、その動作原理を理解しておくことが必要です。詳細は拙著『今すぐ導入!PHP×PostgreSQLで作る最強Webシステム』(技術評論社、2003年)などをご覧いただきたいのですが、ここでは概略のみを説明します。

   図5は、「100, 101, 105, 112, 119, 220, 231, 237, 242」の9個の値を登録した整数型の列に対してB-treeインデックスを作成したときの状況を表しています。

VACUUMと行の再利用
図5:B-treeインデックスの構造
『今すぐ導入!PHPxPostgreSQLで作る最強Webシステム』
(石井達夫著、技術評論社、2003年、ISBN-4774116475)から引用


   実際の値は一番下の「リーフノード」に格納されています。リーフノードには値が昇順にいくつかの箱(ノード)に分かれて格納されています。それぞれのノードは大きな順にポインタで結ばれており、あるリーフノードから、自分よりも大きな値を持つリーフノードを簡単に見つけることができるようになっています。また、図にはありませんが、逆方向へのポインタも持っているので、自分よりも小さな値を持つリーフノードを見つけるのも簡単です。

   値の検索は、一番上のノード(ルートノード)から始まります。たとえば、220を検索する場合は、119よりも大きい値なので、119の右側のポインタ(灰色の部分)を通じて231の入っているインデックスノードに導かれます。119は231よりは小さいので、今度は231の左側のポインタを通じてリーフノードに導かれ、119と220の入っているノードに辿り着いて検索が完了します。リーフノードにはテーブル本体へのポインタが格納されており、最終的にテーブル本体にアクセスしてインデックスのデータが正当なものであるかどうかが確認されます(注1)。

※注1:VACUUMのところで述べたように、PostgreSQLでは削除や更新によって生じた古いデータは再利用されるまではそのまま残っています。テーブル本体では行を調べることによって古いデータかどうかの判別が可能ですが、インデックスにはそういった識別データが含まれていないので、必ず最後にテーブルにアクセスしてデータの正当性を確認する必要があります。
重複の多いデータには不適

   B-treeインデックスの構造から推測できるように、B-treeインデックスは値の重複がない場合に最大の効果を発揮し、重複データが増えるにつれ、効率が落ちていきます。極端に重複の多いデータ、たとえば性別などのデータに対してはほとんど効果がありません。また、このようなデータの場合は、PostgreSQLもインデックスの使用を避けるため、インデックスを作成しても無意味です。

1   2  次のページ

書籍紹介
まるごと PostgreSQL! Vol.1
まるごと PostgreSQL! Vol.1日本での市場シェアNo.1(オープンソースRDBMS部門)データベースソフトPostgreSQLの最新情報を、開発メンバーを含む豪華執筆陣が多面的かつ詳細に解説します。PostgreSQL用クラスタリング/レプリケーションソフト、PostgreSQL⇔Oracle移行、PostgreSQLによる大規模サイト構築法、新バージョンPostgreSQL 8.0先行レビュー、PostgreSQL用.NETデータプロバイダ等々、他では読めない貴重な記事が満載です。

発売日:2004/12/08発売
定価:\1,890(本体 \1,800+税)
石井達夫
著者プロフィール
石井達夫(ISHII, Tatsuo)
PostgreSQLの開発者、エバンジェリスト。本業でもPostgreSQLによるビジネスに関わっている。著書に「PostgreSQL完全攻略ガイド」「PHPxPostgreSQLで作る最強Webシステム」(技術評論社)などがある。


INDEX
第4回:インデックスの活用によるチューニング
インデックスの活用
 インデックスを使った方がよいとは限らない
PostgreSQLチューニング実践テクニック
第1回postgresql.confによるチューニング(1)
第2回postgresql.confによるチューニング(2)
第3回VACUUMの活用によるチューニング
第4回インデックスの活用によるチューニング
第5回高度なインデックスの活用
第6回統計情報の最適化
第7回オプティマイザに関するチューニング
第8回GROUP BYを使用したチューニング

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30