ソフトウェア
上級

データベースインデックス(データベースインデックス)

DB検索高速化データ構造。PostgreSQL B-tree/GiN/BRIN・MySQL InnoDB B+tree・Redis HASH・Elasticsearch Inverted Indexが代表で、SELECT高速化の代償にINSERT/UPDATE書込は数%低下。

0 回閲覧
0 いいね
2026/4/25 更新
関連タグ
B-tree
GiN
BRIN
Inverted

概要

データベースインデックスは、テーブル内の行を高速に検索するために設計されたデータ構造です。
インデックスを作成すると、クエリ実行時に全行を走査する必要がなくなり、検索性能が飛躍的に向上します。
一方で、インデックスは追加・更新時に書き込み負荷を増大させるため、書き込み頻度が高いワークロードでは注意が必要です。

主な特徴・仕組み

  • B‑tree(PostgreSQL, MySQL InnoDB)
    • ページサイズ 8KB、平均深さ 8 レベル、カーディナリティ 1,000,000 以上。
    • 典型的な検索時間は O(log n) で、ほぼ 200 ns で行を特定。
  • GiN(PostgreSQL)
    • 配列・JSONB 等の多値列に対し、各要素を個別にインデックス化。
    • カーディナリティ 1,000,000 以上、検索時のスキャン率 0.01% 以内。
  • BRIN(PostgreSQL)
    • 大容量テーブルで連続したブロックに対し、統計情報のみ保持。
    • ブロックサイズ 128KB、インデックスサイズ 200 MB、検索時のページスキャン 5% 未満。
  • Inverted Index(Elasticsearch, Apache Solr)
    • テキスト検索向けに、語彙をキー、文書 ID を値として保持。
    • 典型的な語彙数 10,000,000、検索時のヒット率 99.9%。

インデックスは SELECT 文の高速化に大きく寄与しますが、INSERT/UPDATE/DELETE の書き込み速度は 2–5 % 低下することがあります。
そのため、インデックス設計は「読み取り重視か書き込み重視か」を明確にした上で行う必要があります。

スペック/製品比較表

データベースインデックスタイプページサイズ深さカーディナリティ代表的製品主要ハードウェア要件
PostgreSQL 15B‑tree / GiN / BRIN8 KB81,000,000+PostgreSQL 15.224 GB DDR5, 1 TB NVMe
MySQL 8.0B+tree (InnoDB)16 KB7500,000+MySQL 8.0.3032 GB DDR4, 2 TB NVMe
Elasticsearch 8.5Inverted4 KB610,000,000+Elasticsearch 8.5.064 GB DDR5, 4 TB NVMe
  • ページサイズ はディスク I/O の単位。
  • 深さ は木構造のレベル数。
  • カーディナリティ はインデックスに格納されるユニークキーの数。

具体例・対応製品

  1. PostgreSQL 15.2 – B‑tree, GiN, BRIN を組み合わせて高速検索を実現。
  2. MySQL 8.0.30 – InnoDB の B+tree が主流で、デフォルトで高速な読み取りを提供。
  3. Elasticsearch 8.5.0 – Inverted Index を採用し、全文検索が得意。
  4. Redis 7.2 – HASH タイプでキー/値を高速に取得。
  5. MongoDB 7.0 – B‑tree で複合インデックスを作成し、クエリ性能を向上。
  6. Oracle Database 23c – B‑tree と Bitmap Index を併用し、分析クエリを高速化。
  7. Microsoft SQL Server 2022 – B‑tree と Columnstore Index を組み合わせて OLAP ワークロードを最適化。
  8. IBM Db2 11.5 – B‑tree と Hash Index を選択可能。
  9. Apache Cassandra 4.0 – B‑tree ではなく LSM Tree を採用し、書き込み性能を重視。
  10. MariaDB 10.6 – InnoDB の B‑tree をベースに高速検索を提供。

ハードウェア側のスペック例

  • CPU:Intel Core Ultra 9 285K、5.7 GHz ブースト、72 MB L3
  • GPU:RTX 4090、24 GB GDDR6X、450 W TDP
  • メモリ:DDR5‑6000、128 GB
  • ストレージ:Samsung 990 Pro、1 TB NVMe、PCIe 5.0 x16
  • ネットワーク:10 GbE NIC、2.5 Gbps SSD

自作PCでの選び方・注意点

  • インデックスはディスク I/O を削減するため、SSD の速度が重要。
  • メモリ容量はインデックスキャッシュに影響。
  • CPU のコア数は B‑tree の走査を並列化できる。
  • PCIe スロットは NVMe SSD の帯域を確保。
  • 電源容量は GPU と CPU の TDP を合わせて計算。
  • 冷却性能は高クロック時の熱設計を考慮。
  • RAID 構成は冗長性と I/O パフォーマンスを両立。
  • バックアップ戦略はインデックスの再構築を含む。

関連用語との違い

  • クラスタ:複数ノードでデータを分散格納。インデックスはノード内で検索を高速化。
  • シャード:データを水平分割。各シャードにインデックスを持つことで検索効率を維持。
  • パーティション:テーブルを論理区分。パーティションキーに対してインデックスを作成すると、パーティションスキャンが可能。
  • ビュー:仮想テーブル。ビュー自体はインデックスを持たないが、基底テーブルのインデックスを利用。

よくある質問(FAQ)

Q1. インデックスを作成すると書き込み速度が落ちるのはなぜですか?
A1. インデックスは追加・更新時に木構造を再構築する必要があるため、書き込み時に追加の I/O と CPU 処理が発生します。

Q2. どのインデックスタイプを選べばよいですか?
A2. 典型的には B‑tree が汎用的ですが、配列や JSONB には GiN、全文検索には Inverted Index、巨大テーブルには BRIN が適しています。

Q3. インデックスのサイズが大きくなると何が起こりますか?
A3. インデックスがメモリに収まらない場合、頻繁にディスクへアクセスし、検索性能が低下します。

まとめ

データベースインデックスは、テーブル検索を高速化する不可欠な要素です。
B‑tree、GiN、BRIN、Inverted Index などの種類があり、用途に応じて選択することで「読み取り性能」と「書き込み性能」のバランスを取ることができます。
自作PC でインデックスを最大限に活用するには、SSD の速度、メモリ容量、CPU コア数、冷却性能を総合的に検討する必要があります。
2025年にリリースされる次世代データベース製品は、さらに高度なインデックス最適化機能を備え、2026年にはハードウェアとソフトウェアの統合が進むと予想されます。
最新のインデックス技術を取り入れた構成で、次世代のデータ処理ニーズに備えることが重要です。

この記事について
カテゴリーソフトウェア
難易度上級
作成日2026/4/18