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

ควรใช้ Loop หรือ Operator OR ในการ Query ข้อมูลจำนวนมากใน MySQL ให้เร็วที่สุด?

เมื่อต้องการ Query ข้อมูลหลายรายการพร้อมกันใน MySQL ให้มีประสิทธิภาพและรวดเร็วที่สุด ควรใช้ IN() Operator แทนการใช้ Loop หรือ OR หลายตัว เพราะ IN() ได้รับการเพิ่มประสิทธิภาพ (Optimize) โดยเฉพาะสำหรับการค้นหาค่าหลายค่าในคอลัมน์เดียวกัน

ตัวอย่างการใช้งาน IN() Operator

1. สร้างตารางตัวอย่าง

mysql> CREATE TABLE DemoTable1538 (
    -> ClientId INT,
    -> ClientName VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.59 sec)

2. เพิ่มข้อมูลทดสอบ

mysql> INSERT INTO DemoTable1538 VALUES(101,'Chris');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable1538 VALUES(102,'Robert');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO DemoTable1538 VALUES(103,'Bob');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable1538 VALUES(104,'Adam');
Query OK, 1 row affected (0.16 sec)

3. แสดงข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable1538;
+----------+------------+
| ClientId | ClientName |
+----------+------------+
|      101 | Chris      |
|      102 | Robert     |
|      103 | Bob        |
|      104 | Adam       |
+----------+------------+
4 rows in set (0.00 sec)

4. Query ข้อมูลหลายค่าด้วย IN()

mysql> SELECT * FROM DemoTable1538 WHERE ClientId IN(101,103,104);
+----------+------------+
| ClientId | ClientName |
+----------+------------+
|      101 | Chris      |
|      103 | Bob        |
|      104 | Adam       |
+----------+------------+
3 rows in set (0.00 sec)

ทำไม IN() เร็วกว่า OR หรือ Loop?

  • IN(): MySQL จะแปลงเป็น Binary Search หรือ Hash Lookup ภายใน ได้ผลลัพธ์ใน O(log n) หรือ O(1)
  • OR หลายตัว: ต้อง Evaluate ทีละเงื่อนไข ทำให้ช้าลงตามจำนวนเงื่อนไข
  • Loop (Application Level): ส่ง Query หลายครั้ง มี Overhead ของ Network Round-trip

ข้อแนะนำ: ใช้ IN() สำหรับค่าที่ทราบล่วงหน้า และพิจารณาใช้ JOIN กับ Temporary Table/Derived Table หากมีค่ามากกว่าหลายร้อยรายการ