Không giống như bảng MyISAM, bảng InnoDB không theo dõi số hàng trong bảng.
Do đó, cách duy nhất để biết chính xác số hàng trong bảng InnoDB là kiểm tra từng hàng trong bảng và tích lũy số lượng. Do đó, trên các bảng InnoDB lớn, thực hiện SELECT COUNT(*) FROM innodb_table
truy vấn có thể rất chậm vì nó thực hiện quét toàn bộ bảng để lấy số hàng.
phpMyAdmin sử dụng một truy vấn như SHOW TABLE STATUS
để nhận ước tính số lượng hàng trong bảng từ công cụ (InnoDB). Vì nó chỉ là ước tính nên nó sẽ thay đổi mỗi khi bạn gọi, đôi khi các biến thể có thể khá lớn và đôi khi chúng gần giống nhau.
Đây là bài đăng trên blog nhiều thông tin về COUNT (*) cho Bảng InnoDB bởi Percona.
Trang hướng dẫn sử dụng MySQL cho HIỂN THỊ TRẠNG THÁI BẢNG HIỆU QUẢ trạng thái:
Số lượng hàng. Một số công cụ lưu trữ, chẳng hạn như MyISAM, lưu trữ số lượng chính xác. Đối với các công cụ lưu trữ khác, chẳng hạn như InnoDB, giá trị này là giá trị gần đúng và có thể thay đổi so với giá trị thực từ 40 đến 50%. Trong những trường hợp như vậy, hãy sử dụng SELECT COUNT (*) để lấy số chính xác.
Trang trên các hạn chế của InnoDB đi vào một số chi tiết hơn:
SHOW TABLE STATUS không cung cấp thống kê chính xác về bảng InnoDB, ngoại trừ kích thước vật lý được dành riêng cho bảng. Số hàng chỉ là ước tính sơ bộ được sử dụng trong tối ưu hóa SQL.
InnoDB không giữ số lượng hàng nội bộ trong bảng vì các giao dịch hiện tại có thể “nhìn thấy” các số lượng hàng khác nhau tại cùng thời điểm. Để xử lý một
SELECT COUNT(*) FROM t
câu lệnh InnoDB quét chỉ mục của bảng, mất một khoảng thời gian nếu chỉ mục này không trực tiếp nằm trong vùng đệm. Nếu bảng của bạn không thay đổi thường xuyên, sử dụng bộ đệm ẩn truy vấn MySQL là một giải pháp tốt. Để đếm nhanh, bạn phải sử dụng một bảng đếm do bạn tự tạo và để ứng dụng của bạn cập nhật nó theo các phần chèn và xóa nó đi. Số lượng hàng gần đúng của ifan là đủ,SHOW TABLE STATUS
có thể được sử dụng. Xem Phần 14.3.14.1, “Hiệu suất InnoDB Mẹo điều chỉnh ” .