在 SQL Server 中,PRIMARY KEY 與 CLUSTERED INDEX 常常被混淆。
很多人在學 SQL 時會問:
- PRIMARY KEY 一定是 CLUSTERED INDEX 嗎?
- 兩者差在哪裡?
- 在資料倉儲中應該怎麼使用?
這篇文章會用簡單方式整理兩者差異與實務應用。
Table of Contents
什麼是 Index(索引) ?
在理解 PRIMARY KEY 與 CLUSTERED INDEX前,需要先了解 Index(索引)。Index 就像書本的目錄,假設有一張資料表:
| store | product | qty |
| ----- | ------- | --- |
| A01 | P1001 | 23 |
| A01 | P1002 | 10 |
| A02 | P1001 | 5 |
如果沒有 Index,執行SQL時,資料庫會逐筆掃描整張表,這叫做:Table Scan,如果建立 Index,資料庫可以直接找到資料位置,查詢速度會快很多。:
SELECT *
FROM inventory
WHERE product = 'P1001'
什麼是 Clustered Index
Clustered Index是資料在磁碟上的實際排序方式,一張資料表只能有一個 Clustered Index,因為資料在硬碟上只能有 一種排序方式。例如:
CREATE CLUSTERED INDEX idx_inventory
ON inventory(snapshot_date, store_id, product_id)
資料可能會按照以下順序儲存:
2026-03-10 A01 P1001
2026-03-10 A01 P1002
2026-03-10 A02 P1001
2026-03-11 A01 P1001
因此進行以下查詢時,會非常快:
WHERE snapshot_date = '2026-03-10'
什麼是 Primary Key
Primary Key的用途是:唯一識別一筆資料
例如:
PRIMARY KEY (order_id)
代表:
- 不可重複
- 不可為 NULL
如果資料如下表,因為order_id是PRIMARY KEY,必須是唯一值,資料庫就會拒絕寫入。
| order_id | product |
| -------- | ------- |
| 1001 | P1 |
| 1001 | P2 |
Primary Key 與 Clustered Index 的關係
在SQL Server中,如果建立PRIMARY KEY,但沒有指定 index 類型,SQL Server 通常會自動建立CLUSTERED INDEX,例如:PRIMARY KEY (id),通常會變成PRIMARY KEY + CLUSTERED INDEX。
PRIMARY KEY 與 CLUSTERED INDEX 差異比較
