Hàm tổng hợp COUNT(*) trả về số lượng hàng trong bảng (kể cả hàng có NULL). Đây là cách tiêu chuẩn, đơn giản và tối ưu nhất.
Ví dụ minh họa
Tạo bảng và chèn 4 hàng:
CREATE TABLE DemoTable1575 (FirstName VARCHAR(20));
INSERT INTO DemoTable1575 VALUES ('Chris'), ('Bob'), ('Adam'), ('Robert');
Đếm số hàng:
SELECT COUNT(*) FROM DemoTable1575;
Kết quả
| count(*) |
|---|
| 4 |
COUNT(*) vs COUNT(cot) vs COUNT(1)
| Cú pháp | Đếm gì | Hiệu năng |
|---|---|---|
COUNT(*) | Tất cả hàng | Nhanh nhất (optimizer tối ưu) |
COUNT(cot) | Hàng có cot ≠ NULL | Chậm hơn (phải check NULL) |
COUNT(1) | Tương đương COUNT(*) | Tương đương |
Khuyên dùng: COUNT(*) — rõ ý nghĩa, tối ưu nhất.
Đếm có điều kiện
SELECT COUNT(*) FROM DemoTable1575 WHERE FirstName LIKE 'C%'; -- 1 (Chris)
Đếm theo nhóm
SELECT department, COUNT(*) FROM employees GROUP BY department;
⚠️ Lưu ý hiệu năng bảng lớn (InnoDB)
COUNT(*)trên bảng InnoDB lớn có thể chậm do MVCC (phải quét index).- Giải pháp: Bảng đếm riêng (counter table), trigger cập nhật, hoặc
information_schema.tables.table_rows(ước lượng). - MySQL 8.0.13+:
SELECT COUNT(*) FROM tdùng parallel scan nếuinnodb_parallel_read_threads> 0.