「SQL 開發容易入門,難在精通。」 — 資深 DBA 諺語
本文整理面試資深 SQL Server 開發人員的標準技術題庫,按難度遞增,助你精準篩選人才。
無法答出核心四大物件者,基礎不足,直接淘汰。
索引 是加速資料存取的資料結構,類似書本目錄。
SQL Server 2000 兩大類:
| 類型 | 葉層儲存內容 | 每表數量 | 特性 |
|---|---|---|---|
| 叢集索引 | **實際資料列** | **僅 1 個** | 資料依索引鍵物理排序;範圍查詢極快 |
| 非叢集索引 | **列定位器** (RID 或叢集鍵) | 最多 249 個 | 邏輯順序與物理順序分離;需書籤查找取回資料 |
NULL = **UNKNOWN (未知)**,不等於空字串
''、不等於零、不等於任何值 (包括 NULL 本身)
WHERE col = NULL 永遠傳回 0 列IS NULL / IS NOT NULLNULL = NULL → UNKNOWN;NULL <> NULL → UNKNOWNCOUNT(*) 計算列數包含 NULL
-- 錯誤:WHERE discount = 0 OR discount IS NULL
-- 正確:WHERE ISNULL(discount, 0) = 0 或 WHERE COALESCE(discount, 0) = 0
-- NOT IN 子查詢若包含 NULL 會傳回空結果
WHERE id NOT IN (SELECT nullable_col FROM table) -- 危險!
-- 改用 NOT EXISTS 或 LEFT JOIN ... WHERE right.id IS NULL
NOCHECK 或暫時停用| 隔離等級 | 髒讀 | 不可重複讀 | 幻讀 | 鎖定行為 |
|---|---|---|---|---|
| Read Uncommitted | Y | Y | Y | 不發出共享鎖 |
| Read Committed (預設) | N | Y | Y | 讀取時短暫共享鎖 |
| Repeatable Read | N | N | Y | 讀取期間保持共享鎖 |
| Serializable | N | N | N | 範圍鎖 (Key-Range Lock) |
| Snapshot (2005+) | N | N | N | **列版本控制**,讀不阻寫、寫不阻讀 |
ALLOW_SNAPSHOT_ISOLATION、READ_COMMITTED_SNAPSHOTsp_lock/sys.dm_tran_locks 診斷| 等級 | 題目範圍 | 及格門檻 |
|---|---|---|
| 初級 | 1-2 題 | 核心物件、索引類型、NULL 基本行為 |
| 中級 | 3-4 題 | PK/FK 深度、隔離等級、基本鎖觀念 |
| 高級 | 5 題 + 情境題 | Snapshot 隔離原理、死鎖分析、參數嗅探、計畫指南 |