ความแตกต่างระหว่าง IN() และ OR ใน MySQL
ทั้ง IN() และ OR ให้ผลลัพธ์เหมือนกัน แต่ **IN() ใช้ Index ได้ ในขณะที่ OR มักไม่ใช้ Index** (ขึ้นกับ Version และ Optimizer)
ตัวอย่างข้อมูล
สร้างตารางและเพิ่มข้อมูล:
mysql> CREATE TABLE DemoTable711 (Id INT, Name VARCHAR(100));
Query OK, 0 rows affected (0.92 sec)
mysql> INSERT INTO DemoTable711 VALUES
(100, 'Chris'), (101, 'Robert'), (102, 'Carol'), (103, 'Mike'), (104, 'Sam');
Query OK, 5 rows affected
คิวรี่ด้วย IN() - ใช้ Index ได้
mysql> SELECT * FROM DemoTable711 WHERE Id IN (101, 103, 104);
+------+--------+ | Id | Name | +------+--------+ | 101 | Robert | | 103 | Mike | | 104 | Sam | +------+--------+ 3 rows in set (0.03 sec)
คิวรี่ด้วย OR - อาจไม่ใช้ Index
mysql> SELECT * FROM DemoTable711 WHERE Id = 101 OR Id = 103 OR Id = 104;
+------+--------+ | Id | Name | +------+--------+ | 101 | Robert | | 103 | Mike | | 104 | Sam | +------+--------+ 3 rows in set (0.00 sec)
สรุปความแตกต่าง
| ด้าน | IN (value1, value2, ...) | OR (col=val1 OR col=val2 ...) |
|---|---|---|
| ความอ่านง่าย | ดีมาก (Compact) | ยาว วุ่นวาย |
| Index Usage | ใช้ได้ (Range/Ref) | มักไม่ใช้ (Full Scan) |
| ประสิทธิภาพ | ดีกว่า | ช้ากว่า |
| Dynamic Values | ยาก (ต้อง Dynamic SQL) | ง่าย (ต่อ String ได้) |
| NULL Handling | ระวัง NULL ใน List | จัดการได้ชัดเจน |
ข้อแนะนำ
- ค่าคงที่/รายการนิיח → ใช้
IN()เสมอ - เงื่อนไขซับซ้อน/หลายคอลัมน์ → ใช้
OR - Subquery → ใช้
IN (SELECT ...)หรือEXISTS - ตรวจสอบด้วย
EXPLAINว่าใช้ Index จริงหรือไม่