1. インデックス設計・パフォーマンス
● インデックスの基礎
- 検索高速化のためのデータ構造(本の索引イメージ)
- 検索・結合・集計で頻繁に使うカラムに貼る
● 主な種類
- B-treeインデックス(最も一般的・範囲検索可)
- ハッシュインデックス(完全一致に特化、範囲不可)
- ビットマップインデックス(値が少ないカラム向け、DWH等)
- ユニークインデックス/複合インデックス
● 複合インデックスの注意
- 先頭カラムからの条件でしか効かない
(例:(A, B, C)→A=,A= AND B=のみOK)
● インデックスが効かない例
- 関数・演算を使う(例:WHERE YEAR(date_col)=2024)
- LIKEの前方一致以外(LIKE '%abc'等)
- NULLやNOT条件
● EXPLAIN(実行計画)の見方
- ALL=全件走査(非効率)
- ref/index=インデックス利用(効率的)
- key: NULL=インデックス不使用
● インデックスの応用
- カバリングインデックス:SELECT/WHEREの全カラム含むと本体アクセス不要
- 部分・関数インデックス:一部RDBMSで特定条件や関数結果にも貼れる
- インデックススキップスキャン:複合の先頭カラム未指定でも一部DBで最適化可
● インデックス設計の注意
- 貼りすぎると更新遅延&ディスク肥大
- 小さな値のバリエーションしかない列は逆効果
2. シーケンス/自動採番
● 目的と用途
- 主キーやID列に「自動で一意な連番」を振る仕組み
● 代表的な実装
- AUTO_INCREMENT(MySQL, MariaDB, SQLite)
- SEQUENCE(PostgreSQL, Oracle:シーケンスオブジェクト利用)
- IDENTITY(SQL Server)
● 注意点
- トランザクション失敗時や削除時も番号が“飛ぶ”ことあり(欠番仕様)
- 分散DBでは重複防止や整合性に追加設計が必要
- UUIDとの違い:予測性・分散性・用途
3. 今日の理解度チェック例
- インデックスが効かないSQL例と修正案(YEAR関数→BETWEENで範囲指定)
- 複合インデックスの「効く・効かない」条件
- カバリングインデックスやビットマップインデックスの使いどころ
- シーケンス/自動採番のDBごとの違いと実装例
まとめ
- インデックス設計のパターンと注意点を体系的に理解
- シーケンス(自動採番)の仕組み・落とし穴も押さえた
- 午後問対策・実務応用どちらにも役立つ内容