Cardinality หมายถึง ความเป็นเอกศรของข้อมูลในคอลัมน์ ส่งผลต่อประสิทธิภาพ Index, Search, Sort
2 ประเภทของ Cardinality
| ประเภท | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| High Cardinality | ค่าเกือบทุกแถวไม่ซ้ำกัน (Unique ใกล้เคียง) | Primary Key, Email, ID Card, UUID |
| Low Cardinality | ค่าซ้ำกันเยอะ ค่าที่แตกต่างกันน้อย | Gender (M/F), Status (Active/Inactive), Boolean |
ตัวอย่าง High Cardinality (Unique Constraint)
mysql> CREATE TABLE UniqueDemo1 (
-> id INT,
-> name VARCHAR(100),
-> UNIQUE(id, name)
-> );
mysql> INSERT INTO UniqueDemo1 VALUES (1, 'John'); -- OK
mysql> INSERT INTO UniqueDemo1 VALUES (1, 'John'); -- ERROR 1062: Duplicate entry
ตัวอย่าง Low Cardinality (ไม่มี Unique)
mysql> CREATE TABLE LowCardinality (id INT, name VARCHAR(100)); mysql> INSERT INTO LowCardinality VALUES (1, 'John'), (1, 'John'); -- OK ไม่ Error
ความสำคัญต่อ Index
- High Cardinality: Index ทำงานได้ดีมาก เหมาะกับ WHERE, JOIN, ORDER BY
- Low Cardinality: Index ไม่คุ้มค่า (Optimizer อาจเลือก Full Table Scan แทน)
Tip: ดู Cardinality จริงได้จากSHOW INDEX FROM table_nameคอลัมน์Cardinalityแสดงค่าประมาณจำนวนค่าที่ไม่ซ้ำ