Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

Primary Key ใน MySQL ถูก Index อัตโนมัติหรือไม่?

ใช่ Primary Key ถูก Index อัตโนมัติ (Implicit Index) ในทุก Storage Engine (InnoDB, MyISAM, Memory, etc.)

ตัวอย่าง

mysql> CREATE TABLE DemoIndex (
    -> Id INT NOT NULL,
    -> PRIMARY KEY(Id)
    -> );

MySQL สร้าง Index ชื่อ PRIMARY ให้อัตโนมัติ

ตรวจสอบ Index

mysql> SHOW INDEX FROM DemoIndex;
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| Table    | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible |
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| DemoIndex| 0          | PRIMARY  | 1            | Id          | A         | 0           | NULL     | NULL   |      | BTREE      |         |               | YES     |
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+

ความแตกต่าง Engine

EnginePK Index TypeClustered?หมายเหตุ
InnoDBBTREEYes (Clustered)Data เก็บเรียงตาม PK (PK = Row Pointer)
MyISAMBTREENo (Non-Clustered)PK เป็น Index แยก Data File แยก
MemoryHASH (Default) / BTREEN/AIn-Memory

Unique Constraint = Index ด้วย

CREATE TABLE t (id INT, email VARCHAR(100), UNIQUE(email));
-- สร้าง Index ชื่อ 'email' ให้อัตโนมัติ
สรุป: PRIMARY KEY = UNIQUE + NOT NULL + AUTO INDEX (Clustered ใน InnoDB) | ไม่ต้อง CREATE INDEX PRIMARY KEY เอง | UNIQUE Constraint ก็สร้าง Index ให้อัตโนมัติ