省視自己,動力還是不太夠,學習的意願差強人意


前四個小時在上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 數值

文章標籤
全站熱搜
創作者介紹
創作者 ky0dd 的頭像
ky0dd

阿京小站

ky0dd 發表在 痞客邦 留言(0) 人氣(1)