ใช่ ควรใช้ LIMIT 1 กับ SELECT 1 เพื่อหยุดการสแกนตารางทันทีที่พบแถวแรก
เหตุผล
SELECT 1 FROM table จะคืนค่า 1 สำหรับทุกแถวในตาราง หากตารางมี 1 ล้านแถว จะได้ 1 ล้านแถวของเลข 1
ตัวอย่างการใช้งาน
สร้างตาราง 7 แถว:
mysql> create table Select1AndLimit1Demo (Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20));
mysql> INSERT INTO Select1AndLimit1Demo(Name) VALUES ('John'),('Carol'),('Sam'),('Bob'),('David'),('Mike'),('Maxwell');
ไม่ใช้ LIMIT 1:
mysql> SELECT 1 FROM Select1AndLimit1Demo;
+---+ | 1 | +---+ | 1 | | 1 | | 1 | | 1 | | 1 | | 1 | | 1 | +---+ (7 rows)
ใช้ LIMIT 1:
mysql> SELECT 1 FROM Select1AndLimit1Demo LIMIT 1;
+---+ | 1 | +---+ | 1 | +---+ (1 row)
กรณีใช้งานจริง
มักใช้ใน EXISTS หรือเช็คการมีอยู่:
-- ตรวจสอบว่ามีข้อมูลหรือไม่
SELECT 1 FROM users WHERE email = 'test@example.com' LIMIT 1;
-- ใน Subquery
SELECT * FROM orders WHERE EXISTS (
SELECT 1 FROM customers WHERE customers.id = orders.customer_id AND active = 1 LIMIT 1
);
ประโยชน์
- หยุด Full Table Scan ทันทีที่เจอแถวแรก
- ประหยัด CPU, I/O, Network
- สำคัญมากเมื่อตารางใหญ่