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

นับจำนวนแถวในตาราง MySQL อย่างง่ายด้วย COUNT(*)


วิธีที่ง่ายที่สุด: COUNT(*)

SELECT COUNT(*) FROM table_name; คืนค่าจำนวนแถวทั้งหมด (รวม NULL rows)

ตัวอย่างการใช้งาน

1. สร้างตาราง

mysql> CREATE TABLE DemoTable1575 (
    -> FirstName VARCHAR(20)
    -> );
Query OK, 0 rows affected (1.00 sec)

2. เพิ่มข้อมูล 4 แถว

mysql> INSERT INTO DemoTable1575 VALUES('Chris'), ('Bob'), ('Adam'), ('Robert');
Query OK, 4 rows affected (...)

3. นับจำนวนแถว

mysql> SELECT COUNT(*) FROM DemoTable1575;

ผลลัพธ์:

+----------+
| COUNT(*) |
+----------+
| 4        |
+----------+
1 row in set (0.03 sec)

COUNT(*) vs COUNT(column) vs COUNT(1)

Syntax นับอะไร NULL Handling Performance (InnoDB)
COUNT(*) ทุกแถว นับ NULL ด้วย เร็วที่สุด (Optimized)
COUNT(1) ทุกแถว นับ NULL ด้วย เท่า COUNT(*)
COUNT(column) แถวที่ Column ≠ NULL ไม่นับ NULL ช้ากว่า (ต้องอ่าน Column)
COUNT(DISTINCT col) Distinct Values ไม่นับ NULL ช้ามาก (Temp Table)

InnoDB และ COUNT(*)

  • InnoDB ไม่เก็บ Row Count ไว้ (MVCC, Transaction Isolation)
  • SELECT COUNT(*) ต้อง Scan Index (Primary Key หรือ Secondary Index ที่เล็กที่สุด)
  • ตารางใหญ่ (>10M rows) อาจช้า → ใช้ Trigger/Maintained Counter Table

วิธีเร็วขึ้นสำหรับตารางใหญ่

1. ใช้ Secondary Index ที่เล็กที่สุด

-- MySQL จะเลือก Index ที่เล็กที่สุดอัตโนมัติ
-- สร้าง Index บน Column เล็ก (TINYINT) เพื่อ COUNT เร็วขึ้น
ALTER TABLE BigTable ADD INDEX idx_tiny (TinyCol);

2. Maintained Counter Table

CREATE TABLE TableStats (TableName VARCHAR(64) PRIMARY KEY, RowCount BIGINT);
-- Trigger ON INSERT/DELETE UPDATE TableStats

3. INFORMATION_SCHEMA (ประมาณการ)

SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'db' AND TABLE_NAME = 'table';

กรณีการใช้งานจริง

  • Pagination: คำนวณ Total Pages
  • Dashboard: แสดงจำนวน Users/Orders/Products
  • Health Check: ตรวจสอบ Table ไม่ว่าง
  • Data Quality: เปรียบเทียบ Expected vs Actual Count