ใช้ COUNT(1) แทน COUNT(*) เพื่อนับจำนวนแถว
COUNT(1) และ COUNT(*) ให้ผลลัพธ์เหมือนกันคือนับจำนวนแถวทั้งหมด (รวมแถวที่มี NULL) แต่ COUNT(1) ชี้ให้เห็นเจตนาชัดเจนว่า "นับแถว" ไม่ใช่ "นับคอลัมน์" และในบาง Database Engine อาจมีประสิทธิภาพเล็กน้อยกว่า (แต่ MySQL ทำ Optimize ให้เหมือนกัน)
ตัวอย่างสร้างตารางและข้อมูล
CREATE TABLE DemoTable (StudentName VARCHAR(100));
INSERT INTO DemoTable (StudentName) VALUES
('John Smith'), ('Chris Brown'), ('David Miller'), ('Carol Taylor');
ข้อมูลในตาราง
+--------------+ | StudentName | +--------------+ | John Smith | | Chris Brown | | David Miller | | Carol Taylor | +--------------+
คำสั่งนับแถวด้วย COUNT(1)
SELECT COUNT(1) FROM DemoTable;
ผลลัพธ์
+----------+ | COUNT(1) | +----------+ | 4 | +----------+
คำอธิบาย:
COUNT(expression)นับจำนวนแถวที่ expression ไม่เป็น NULL1เป็นค่าคงที่ที่ไม่เคยเป็น NULL → นับทุกแถวCOUNT(*)นับทุกแถวโดยตรง (มาตรฐาน SQL)
วิธีนับแถวอื่นๆ:
SELECT COUNT(*) FROM DemoTable;(มาตรฐาน, แนะนำ)SELECT COUNT(primary_key) FROM DemoTable;(นับคีย์หลัก, เร็วสุดถ้ามี Index)SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'DemoTable';(ประมาณการ, เร็วมากแต่ไม่แม่นยำสำหรับ InnoDB)
สรุป: ใน MySQL (InnoDB) COUNT(*), COUNT(1), COUNT(pk) ประสิทธิ์เท่ากัน เพราะ Optimizer จัดการเหมือนกัน ควรใช้ COUNT(*) ตามมาตรฐาน SQL เพื่อความอ่านง่าย