データベースインデックス(データベースインデックス)
DB検索高速化データ構造。PostgreSQL B-tree/GiN/BRIN・MySQL InnoDB B+tree・Redis HASH・Elasticsearch Inverted Indexが代表で、SELECT高速化の代償にINSERT/UPDATE書込は数%低下。
概要
データベースインデックスは、テーブル内の行を高速に検索するために設計されたデータ構造です。
インデックスを作成すると、クエリ実行時に全行を走査する必要がなくなり、検索性能が飛躍的に向上します。
一方で、インデックスは追加・更新時に書き込み負荷を増大させるため、書き込み頻度が高いワークロードでは注意が必要です。
主な特徴・仕組み
- 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 15 | B‑tree / GiN / BRIN | 8 KB | 8 | 1,000,000+ | PostgreSQL 15.2 | 24 GB DDR5, 1 TB NVMe |
| MySQL 8.0 | B+tree (InnoDB) | 16 KB | 7 | 500,000+ | MySQL 8.0.30 | 32 GB DDR4, 2 TB NVMe |
| Elasticsearch 8.5 | Inverted | 4 KB | 6 | 10,000,000+ | Elasticsearch 8.5.0 | 64 GB DDR5, 4 TB NVMe |
- ページサイズ はディスク I/O の単位。
- 深さ は木構造のレベル数。
- カーディナリティ はインデックスに格納されるユニークキーの数。
具体例・対応製品
- PostgreSQL 15.2 – B‑tree, GiN, BRIN を組み合わせて高速検索を実現。
- MySQL 8.0.30 – InnoDB の B+tree が主流で、デフォルトで高速な読み取りを提供。
- Elasticsearch 8.5.0 – Inverted Index を採用し、全文検索が得意。
- Redis 7.2 – HASH タイプでキー/値を高速に取得。
- MongoDB 7.0 – B‑tree で複合インデックスを作成し、クエリ性能を向上。
- Oracle Database 23c – B‑tree と Bitmap Index を併用し、分析クエリを高速化。
- Microsoft SQL Server 2022 – B‑tree と Columnstore Index を組み合わせて OLAP ワークロードを最適化。
- IBM Db2 11.5 – B‑tree と Hash Index を選択可能。
- Apache Cassandra 4.0 – B‑tree ではなく LSM Tree を採用し、書き込み性能を重視。
- 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年にはハードウェアとソフトウェアの統合が進むと予想されます。
最新のインデックス技術を取り入れた構成で、次世代のデータ処理ニーズに備えることが重要です。