2012-08-12 44 views

Trả lời

37

khác với các bảng MyISAM, bảng InnoDB không theo dõi bao nhiêu hàng bảng chứa.

Do đó, cách duy nhất để biết số hàng chính xác trong bảng InnoDB là kiểm tra từng hàng trong bảng và tích lũy một số. Do đó, trên các bảng InnoDB lớn, thực hiện truy vấn SELECT COUNT(*) FROM innodb_table có thể rất chậm vì nó thực hiện quét toàn bộ bảng để nhận được số hàng.

phpMyAdmin sử dụng truy vấn như SHOW TABLE STATUS để nhận số ước tính số hàng trong bảng từ công cụ (InnoDB). Vì nó chỉ là một ước tính, nó thay đổi mỗi khi bạn gọi nó, đôi khi các biến thể có thể khá lớn, và đôi khi chúng gần nhau.

Đây là một bài đăng blog thông tin về COUNT(*) for InnoDB tables bởi Percona.

Các MySQL của nhãn hiệu trang cho SHOW TABLE STATUS trạng thái:

Số hàng. Một số công cụ lưu trữ, chẳng hạn như MyISAM, lưu trữ số 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à một xấp xỉ và có thể thay đổi từ giá trị thực tế tới 40 đến 50%. Trong những trường hợp như vậy, hãy sử dụng SELECT COUNT (*) để có được số lượng chính xác.

Các trang trên InnoDB restrictions đi vào một số chi tiết hơn:

SHOW TABLE STATUS không đưa ra thống kê chính xác trên các bảng InnoDB, ngoại trừ kích thước vật lý thuộc về bàn. Số lượng hàng chỉ là một ước tính sơ bộ được sử dụng trong tối ưu hóa SQL.

InnoDB không giữ một số nội bộ của các hàng trong một bảng vì giao dịch đồng thời có thể “nhìn thấy” số khác nhau của hàng cùng lúc . Để xử lý một tuyên bố SELECT COUNT(*) FROM t, InnoDB quét chỉ mục của bảng, mất một thời gian nếu chỉ mục không phải là hoàn toàn trong vùng đệm. Nếu bảng của bạn không thay đổi thường xuyên, sử dụng bộ nhớ cache truy vấn MySQL là một giải pháp tốt. Để có được số đếm nhanh, bạn phải sử dụng bảng truy cập mà bạn tự tạo và cho phép ứng dụng cập nhật nó theo phần chèn và xóa nó. Nếu số lượng hàng gần đúng là đủ, SHOW TABLE STATUS có thể được sử dụng. Xem Phần 14.3.14.1, “InnoDB Performance Tuning Tips”.

+7

Đợi điểm quan trọng là ** cách hiển thị 'HIỂN THỊ TABLE STATUS' của nó như thế nào? – Pacerier

4

phpMyAdmin sử dụng một phương pháp nhanh chóng để có được đếm hàng, và phương pháp này chỉ trả về một số gần đúng trong trường hợp của các bảng InnoDB.

Xem $cfg['MaxExactCount'] để biết cách sửa đổi các kết quả đó, nhưng điều này có thể có tác động nghiêm trọng đến hiệu suất.

Các vấn đề liên quan