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

วิธีนับจำนวนแถวในตาราง MySQL โดยไม่ใช้ COUNT(*)

ใช้ 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 ไม่เป็น NULL
  • 1 เป็นค่าคงที่ที่ไม่เคยเป็น 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 เพื่อความอ่านง่าย