Tóm tắt
Dùng COUNT(*) để đếm tổng số hàng trong bảng (kể cả hàng có NULL).
Cú pháp
SELECT COUNT(*) FROM ten_bang;
-- Hoặc có alias
SELECT COUNT(*) AS TotalRows FROM ten_bang;
Ví dụ
1. Tạo bảng
CREATE TABLE CountRowsDemo (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(20)
);
2. Chèn dữ liệu (có NULL)
INSERT INTO CountRowsDemo (Name) VALUES
(NULL), ('Sam'), (NULL), ('Mike'), ('David'), (NULL), (NULL), ('Carol');
3. Đếm
SELECT COUNT(*) AS TotalRows FROM CountRowsDemo;
4. Kết quả
+-----------+
| TotalRows |
+-----------+
| 8 |
COUNT(*) vs COUNT(cot) vs COUNT(1)
| Hàm | Đếm gì | NULL | Hiệu năng InnoDB |
|---|---|---|---|
| COUNT(*) | Tất cả hàng | Đếm | Nhanh (optimizer chọn index nhỏ nhất) |
| COUNT(1) | Tất cả hàng | Đếm | Giống COUNT(*) |
| COUNT(cot) | Hàng có cot NOT NULL | Bỏ qua | Chậm hơn nếu cần đọc cột |
| COUNT(DISTINCT cot) | Giá trị duy nhất không NULL | Bỏ qua | Chậm (cần sort/hash) |
Lưu ý InnoDB
- InnoDB không lưu counter chính xác – COUNT(*) quét index (thường là secondary index nhỏ nhất).
- Bảng lớn: COUNT(*) chậm – cân nhắc cache counter, trigger maintain counter table, hoặc ước lượng từ
SHOW TABLE STATUS(Rows). - MyISAM lưu counter chính xác – COUNT(*) tức thì.