省視自己,動力還是不太夠,學習的意願差強人意
前四個小時在上ITS的SQL題庫原來課還沒上完,後四個小時上索引
🧠 索引的基本觀念
1. 為什麼要使用索引?
提升查詢效率(尤其是大量資料時)。沒有索引時,系統會從頭到尾逐筆搜尋資料。有索引時,先查索引(MYI),再去資料區(MYD)抓資料,速度快很多。
2. 索引的種類
類型 名稱 特點
主索引鍵 PRIMARY KEY 唯一、不允許 NULL、一張表只能一個
唯一索引 UNIQUE INDEX 不允許重複,可包含 NULL
非唯一索引 NON-UNIQUE INDEX 可重複,可包含 NULL
🧰 索引的建立方式
1. 建表時設索引
CREATE TABLE 表名 (
id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE,
name VARCHAR(50),
INDEX(name, tel)
);
2. 建立後再加
使用 ALTER TABLE 或 CREATE INDEX
ALTER TABLE 表名 ADD PRIMARY KEY(id);
CREATE INDEX index_name ON 表名(name, tel);
🧹 索引的移除與命名
刪除索引:
ALTER TABLE 表名 DROP PRIMARY KEY;
ALTER TABLE 表名 DROP INDEX 索引名稱;
DROP INDEX 索引名稱 ON 表名; -- 一次只能刪一個
🔢 AUTO_INCREMENT(自動遞增欄位)
只能用在 整數欄位,且通常設為 PRIMARY KEY。
建議加上 UNSIGNED NOT NULL。
每表只能有一個 AUTO_INCREMENT。
可透過 LAST_INSERT_ID() 取得最後的遞增值。
使用 TRUNCATE TABLE 可重置遞增值(會清空資料)。
🔗 FOREIGN KEY(外部鍵)
用於建立 兩表之間的關聯。
常與 ON DELETE CASCADE / SET NULL / RESTRICT 搭配:
CASCADE:父表刪除→子表自動刪除。
SET NULL:父表刪除→子表設為 NULL。
RESTRICT:若子表有對應資料→父表不能刪。
🧩 複合索引(Composite Index)
一個索引由多個欄位組合而成。
可套用在 PRIMARY KEY、UNIQUE KEY 或 INDEX。
例如:
CREATE TABLE ex (
user_id INT,
email VARCHAR(100),
PRIMARY KEY(user_id, email)
);
使用時要注意:只有查詢「前面的欄位」才會啟動索引。
查 A:✅
查 B:❌(索引可能無效)
查 A AND B:✅
設計複合索引時,應該將查詢中最常用、選擇性最高的欄位放在最左邊,可以最大限度地提高索引的使用效率,減少 EXPLAIN 中的 rows 數值
