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

เปรียบเทียบ WHERE IN vs OR ใน MySQL: IN ใช้ Index ได้ OR ไม่ได้

ความแตกต่างระหว่าง 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 จริงหรือไม่