คำสั่ง LIMIT 0 ใน MySQL SELECT statement จะคืนค่า empty result set (ชุดผลลัพธ์ว่าง) ซึ่งดูเหมือนไร้ประโยชน์ แต่จริงๆ มีประโยชน์ในบางสถานการณ์
ทำไม LIMIT 0 ถึงถูกต้อง
ตามเอกสารอย่างเป็นทางการของ MySQL (Limit Optimization) LIMIT 0 ถูกออกแบบมาเพื่อ:
- ตรวจสอบความถูกต้องของคำสั่ง (Query Validation) - ทดสอบว่า syntax ถูกต้อง ตาราง/คอลัมน์มีอยู่จริง โดยไม่ต้องคืนข้อมูลจริง
- ดึงข้อมูลเมตา (Metadata) - ให้ API/Connector ได้รับข้อมูลโครงสร้างคอลัมน์ (ชื่อ ชนิดข้อมูล ความยาว) โดยไม่ต้องส่งข้อมูลแถว
- ทดสอบ Query Plan - ดู EXPLAIN plan โดยไม่รันคิวรี่จริง
ตัวอย่างการใช้งาน
1. สร้างตารางและข้อมูลตัวอย่าง
CREATE TABLE Limit0Demo (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(20),
PRIMARY KEY (Id)
);
INSERT INTO Limit0Demo (Name) VALUES
('David'), ('Larry'), ('Carol'), ('Bob'), ('John'),
('Sam'), ('James'), ('Maxwell'), ('Ricky'), ('Adam');
2. ใช้ LIMIT 0
SELECT * FROM Limit0Demo LIMIT 0;
ผลลัพธ์: Empty set (0.00 sec) - ไม่มีแถวข้อมูล แต่ไม่มี error
3. เปรียบเทียบกับ LIMIT 3
SELECT * FROM Limit0Demo LIMIT 3;
ผลลัพธ์:
+----+-------+
| Id | Name |
+----+-------+
| 1 | David |
| 2 | Larry |
| 3 | Carol |
+----+-------+
กรณีใช้งานจริง
1. ตรวจสอบคอลัมน์ที่จะได้รับ (สำหรับ ORM/Connector)
-- Application ต้องการรู้ schema ก่อน fetch จริง
SELECT * FROM large_table WHERE complex_condition LIMIT 0;
2. ทดสอบ Syntax ในการพัฒนา
-- วิ่งเร็ว ไม่ต้องรอข้อมูลกลับมา
SELECT * FROM huge_table JOIN ... WHERE ... LIMIT 0;
3. ใช้กับ EXPLAIN
EXPLAIN SELECT * FROM table WHERE condition LIMIT 0;
ข้อแตกต่าง LIMIT 0 vs LIMIT 1
| คำสั่ง | คืนแถว | ใช้ Index | ประโยชน์หลัก |
|---|---|---|---|
| LIMIT 0 | 0 | ไม่จำเป็น | Validate syntax, get metadata |
| LIMIT 1 | 1 | อาจใช้ index | ดูตัวอย่างข้อมูล, existence check |