Tôi muốn một cách nhanh chóng để đếm số lượng hàng trong bảng có vài triệu hàng. Tôi đã tìm thấy bài đăng " MySQL: Cách nhanh nhất để đếm số lượng hàng " trên Stack Overflow, có vẻ như nó sẽ giải quyết vấn đề của tôi. Bayuah cung cấp câu trả lời này:
SELECT
table_rows "Rows Count"
FROM
information_schema.tables
WHERE
table_name="Table_Name"
AND
table_schema="Database_Name";
Điều mà tôi thích bởi vì nó trông giống như một tra cứu thay vì quét, vì vậy nó sẽ nhanh, nhưng tôi quyết định thử nghiệm nó với
SELECT COUNT(*) FROM table
để xem có bao nhiêu sự khác biệt về hiệu suất.
Thật không may, tôi nhận được câu trả lời khác nhau như dưới đây:
Câu hỏi
Tại sao các câu trả lời khác nhau khoảng 2 triệu hàng? Tôi đoán truy vấn thực hiện quét toàn bộ bảng là số chính xác hơn, nhưng có cách nào để tôi có thể lấy đúng số mà không phải chạy truy vấn chậm này không?
Tôi chạy ANALYZE TABLE data_302
, hoàn thành trong 0,05 giây. Khi tôi chạy lại truy vấn, bây giờ tôi nhận được kết quả gần hơn với 34384599 hàng, nhưng nó vẫn không giống select count(*)
với 34906061 hàng. Có phân tích bảng trả về ngay lập tức và xử lý trong nền? Tôi cảm thấy giá trị của nó đề cập đến đây là một cơ sở dữ liệu thử nghiệm và hiện không được viết cho.
Không ai quan tâm nếu đó chỉ là một trường hợp nói với ai đó về một cái bàn lớn như thế nào, nhưng tôi muốn chuyển số hàng cho một bit mã sẽ sử dụng hình đó để tạo một truy vấn không đồng bộ "có kích thước bằng nhau" để truy vấn cơ sở dữ liệu song song, tương tự như phương pháp được hiển thị trong Tăng hiệu năng truy vấn chậm với thực thi truy vấn song song của Alexander Rubin. Như vậy, tôi sẽ chỉ nhận được id cao nhất SELECT id from table_name order by id DESC limit 1
và hy vọng các bảng của mình không bị phân mảnh quá nhiều.
NUM_ROWS
cột