まず結論

インデックスは検索を高速化する「索引」。ビューは仮想テーブル(SELECT文の結果を名前で参照)。どちらも実務・試験で頻出の概念です。インデックスは検索は速くなるがINSERT/UPDATEが遅くなるトレードオフに注意。

インデックスの仕組み

インデックスなし
全行をスキャン(順に確認)
100万行 → 最悪100万回の比較
→ O(n) 線形時間
インデックスあり
B-tree構造で二分探索的に検索
100万行 → 約20回の比較
→ O(log n) 対数時間
-- インデックスの作成 CREATE INDEX idx_name ON customers (name); -- インデックスの削除 DROP INDEX idx_name;
インデックスのメリット

✅ SELECT(検索)が大幅に高速化
✅ ORDER BY・WHERE句に効果的

インデックスのデメリット

❌ INSERT/UPDATE/DELETEが遅くなる(索引の更新コスト)
❌ ディスク容量を消費

ビュー(VIEW)

-- ビューの作成(仮想テーブル) CREATE VIEW high_sales AS SELECT name, amount FROM customers c JOIN orders o ON c.id = o.cust_id WHERE o.amount >= 10000; -- ビューへの問い合わせ(通常のテーブルと同様) SELECT * FROM high_sales;
ビューのメリット

✅ 複雑なSQLを簡略化(再利用性)
✅ アクセス制御(必要な列だけ公開)
✅ データの独立性(テーブル変更の影響を抑える)

ビューの特徴

実データを持たない「仮想テーブル」
問い合わせのたびにSELECT文が実行される
一般的に更新不可(一部例外あり)

主キー・外部キー・制約

制約役割
PRIMARY KEY行を一意に識別。NULL不可・重複不可
FOREIGN KEY他テーブルの主キーを参照。参照整合性を保証
UNIQUE重複禁止(NULL許可)
NOT NULLNULL値を禁止
CHECK条件を満たす値のみ許可(例:age >= 0)
DEFAULT省略時のデフォルト値を設定

🎯 試験での出方

⚠️ よくある間違い

✍️ 確認クイズ

Q1. インデックスを設定したとき、性能が低下する操作はどれか。
✅ 正解は②。インデックスはデータ変更のたびに更新が必要なため、INSERT・UPDATE・DELETE操作が遅くなります。検索(SELECT)は大幅に速くなります。
Q2. ビューの説明として正しいものはどれか。
✅ 正解は②。ビューは実データを持たない仮想テーブルです。問い合わせのたびに定義のSELECT文が実行されます。複雑なSQLの簡略化やアクセス制御に使います。
Q3. 外部キー制約によって防がれることはどれか。
✅ 正解は②。外部キー制約は参照先テーブルの主キーに存在しない値を挿入することを禁止します(参照整合性)。例えば存在しない顧客IDを注文テーブルに挿入できなくなります。
Q4. インデックスが最も効果的なのはどのような状況か。
✅ 正解は②。インデックスは大量データの中から条件に合う行を素早く見つける(WHERE句)ときに効果を発揮します。行数が少ない場合は全件スキャンとほぼ差がなくオーバーヘッドのほうが大きくなります。INSERT時はインデックスの更新が発生するため、逆に遅くなります。
Q5. PRIMARY KEYとUNIQUE制約の違いとして正しいものはどれか。
✅ 正解は③。PRIMARY KEYはNULL値を許可せず、かつ重複も禁止します(行の一意識別のため)。UNIQUE制約は重複を禁止しますが、NULL値は複数行に存在できる場合があります(DBMSにより異なる)。テーブルにはPRIMARY KEYは1つだけですが、UNIQUEは複数設定できます。

Sponsor Link