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

Cardinality ใน MySQL คืออะไร (High vs Low)

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 แสดงค่าประมาณจำนวนค่าที่ไม่ซ้ำ