วิธีตรวจสอบว่าแถวมีอยู่ในตาราง MySQL อย่างมีประสิทธิภาพ
วิธีที่เร็วที่สุดและใช้ทรัพยากรน้อยที่สุดคือใช้ COUNT(1) หรือ COUNT(*) พร้อมเงื่อนไข WHERE แทนการ SELECT *
SELECT COUNT(1) FROM yourTableName WHERE yourCondition;
ตัวอย่างการใช้งาน
สร้างตารางและเพิ่มข้อมูล:
mysql> create table DemoTable (Id int, FirstName varchar(20)); mysql> insert into DemoTable values(100,'Larry'); mysql> insert into DemoTable values(110,'Sam'); mysql> insert into DemoTable values(120,'Mike'); mysql> insert into DemoTable values(130,'Carol'); mysql> insert into DemoTable values(140,'David');
ตรวจสอบว่ามีแถวที่ Id = 130 หรือไม่:
mysql> select count(1) from DemoTable where Id = 130;
+----------+ | count(1) | +----------+ | 1 | +----------+
การตีความผลลัพธ์:
- ผลลัพธ์ = 1 (หรือ > 0) → พบแถว
- ผลลัพธ์ = 0 → ไม่พบแถว
ทำไม COUNT(1) จึงดีกว่า SELECT *:
- ไม่ต้องส่งข้อมูลทั้งแถวกลับมา (Network/IO น้อยลง)
- Optimizer สามารถใช้ Index Only Scan ได้ (ถ้ามี Index บนคอลัมน์ WHERE)
- หยุดค้นหาทันทีที่พบแถวแรก (Short-circuit) ในบาง Storage Engine
ทางเลือกอื่น: EXISTS (SELECT 1 FROM table WHERE condition) - ใช้ใน Subquery ได้ดีมาก และหยุดค้นหาทันทีที่พบ