ใน MySQL KEY เป็น Synonym (คำ 동의어) ของ INDEX ทั้งคู่หมายถึง Index เหมือนกัน
จาก Documentation
KEY is normally a synonym for INDEX. The key attribute PRIMARY KEY can also be specified as just KEY when given in a column definition. This was implemented for compatibility with other database systems.
การใช้งาน
1. PRIMARY KEY (สามารถเขียน KEY ได้)
-- ทั้งคู่เทียบเท่า
CREATE TABLE KeyDemo (
id INT PRIMARY KEY
);
CREATE TABLE KeyDemo2 (
id INT,
KEY (id) -- เทียบเท่า PRIMARY KEY (id)
);
2. UNIQUE KEY
CREATE TABLE t (
email VARCHAR(255),
UNIQUE KEY uk_email (email)
-- เทียบเท่า UNIQUE INDEX uk_email (email)
);
3. INDEX / KEY (Non-unique)
CREATE TABLE t (
name VARCHAR(100),
KEY idx_name (name) -- Non-unique Index
-- INDEX idx_name (name) -- เหมือนกัน
);
ตัวอย่างจากบทความ
CREATE TABLE KeyDemo (
id INT,
PRIMARY KEY (id)
);
INSERT INTO KeyDemo VALUES (1), (2);
SELECT * FROM KeyDemo;
+----+
| id |
+----+
| 1 |
| 2 |
+----+
SHOW INDEX Output
SHOW INDEX FROM KeyDemo;
+--------+------------+----------+--------------+-------------+-----------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation |
+--------+------------+----------+--------------+-------------+-----------+
| keydemo| 0 | PRIMARY | 1 | id | A |
+--------+------------+----------+--------------+-------------+-----------+
-- Key_name = PRIMARY (เป็น PRIMARY KEY)
-- Non_unique = 0 (Unique)
Key vs Index ใน Context อื่น
- PRIMARY KEY = Unique + Not Null + Clustered Index (InnoDB)
- UNIQUE KEY = Unique + Allows Null (Multiple Nulls)
- KEY / INDEX = Non-unique Index (Secondary Index)
- FOREIGN KEY = Constraint (ไม่ใช่ Index โดยตรง แต่ MySQL สร้าง Index ให้อัตโนมัติ)
Best Practice
- ใช้
INDEXสำหรับ Non-unique Index (ชัดเจนกว่า) - ใช้
PRIMARY KEY,UNIQUE KEYตามมาตรฐาน - ชื่อ Index ให้มี Prefix:
idx_(Normal),uk_(Unique),fk_(Foreign Key) - หลีกเลี่ยงใช้
KEYคนเดียวสำหรับ Non-unique (สับสนกับ PRIMARY KEY)