COUNT (*) trên InnoDB bất cứ khi nào phpMyAdmin tải


8

Đó là một vấn đề được biết rằng innodb chậm

SELECT count(*) FROM Table

Do đó tôi tránh điều đó. Nhưng tôi nhận thấy rằng bất cứ khi nào tôi đăng nhập vào phpmyadmin, nó sẽ tự động thực thi một count(*)bảng innodb của tôi với 19k hàng, có thể mất đến một phút để thực thi. Tuy nhiên, nó không bắt đầu như vậy count(*)cho bảng innodb khác với 4 triệu hàng.

Một manh mối khác, trong phpmyadmin, dưới cột Bản ghi, số lượng bản ghi cho bảng 19k hàng đang hiển thị giá trị chính xác trong khi bảng 4 triệu hàng đang hiển thị khoảng.

Tôi hiểu bảng innodb đưa ra ước tính về số lượng hàng. Nhưng dường như đối với bảng nhỏ hơn, trong trường hợp này với 19k hàng, phpmyadmin quyết định thực hiện count(*)thay vì chỉ đưa ra ước tính.

Câu hỏi là, có cách nào để ngăn phpmyadmin thực hiện việc đếm như vậy trên bảng innodb của tôi không? Chỉ cần đưa ra ước tính thay vì thực hiện đếm hàng đắt tiền mỗi khi tôi làm mới màn hình phpmyadmin của mình.


Nghĩ rằng tôi đã tìm thấy câu trả lời. Có $ cfg ['MaxExactCount'] = 20000; trong cài đặt phpmyadmin. Chỉ các hàng hơn 20k sẽ đưa ra ước tính. Câu hỏi tiếp theo của tôi là, tôi sẽ chỉnh sửa $ cfg ở đâu ['MaxExactCount']?

@Kenny, chỉ cần ghi đè giá trị 20000bằng một số nhỏ hơn, ví dụ: 300lưu tệp, làm mới phpmyadmin và bạn đã sẵn sàng.
Pacerier

Câu trả lời:


3

Chỉnh sửa config.inc.php và thay đổi cài đặt cho MaxExactCount .

$ cfg ['MaxExactCount']
    Loại: số nguyên
    Giá trị mặc định: 500000

Đối với các bảng InnoDB, xác định xem các bảng lớn như thế nào phpMyAdmin sẽ nhận được 
số lượng hàng chính xác bằng cách sử dụng CHỌN COUNT. Nếu hàng gần đúng được tính là trả lại
bởi SHOW TABLE STATUS nhỏ hơn giá trị này, CHỌN COUNT sẽ được sử dụng, 
nếu không, số lượng gần đúng sẽ được sử dụng.

Liên kết xuống ............
Pacerier

@Pacerier: Liên kết tốt hơn.
Mike Sherrill 'Nhớ lại mèo'

1
À, bây giờ bạn đã khiến câu trả lời của tôi trở nên dư thừa .......
Pacerier

1

phpMyAdmin sẽ chỉ thực hiện select count(*) nếu số lượng hàng ước tính nằm trong ngưỡng được đặt (mặc định là 500k tùy thuộc vào phiên bản của bạn):

$cfg['MaxExactCount']

Đối với các bảng InnoDB, xác định xem các bảng lớn phpMyAdmin sẽ nhận được số lượng hàng chính xác bằng cách sử dụng SELECT COUNT. Nếu số hàng xấp xỉ được trả về bởi SHOW TABLE STATUSnhỏ hơn giá trị này, SELECT COUNTsẽ được sử dụng, nếu không, số lượng gần đúng sẽ được sử dụng.

Chỉ cần đặt ngưỡng thành một số nhỏ hơn để tránh select count(*)s vô nghĩa .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.