COUNT (*) pada InnoDB setiap kali phpMyAdmin dimuat

8

Ini adalah masalah yang diketahui bahwa innodb lambat

SELECT count(*) FROM Table

Karena itu saya menghindari itu. Tapi saya perhatikan bahwa setiap kali saya login ke phpmyadmin, itu akan secara otomatis mengeksekusi count(*)tabel innodb saya dengan 19k baris, yang bisa memakan waktu hingga satu menit untuk dieksekusi. Namun itu tidak memulai seperti count(*)untuk tabel innodb lainnya dengan 4 juta baris.

Petunjuk lain, di phpmyadmin, di bawah kolom Records, jumlah record untuk tabel 19k-baris menunjukkan nilai yang tepat sedangkan tabel 4-juta-baris menunjukkan sekitar.

Saya mengerti tabel innodb memberikan estimasi jumlah baris. Tetapi tampaknya untuk tabel yang lebih kecil, dalam hal ini dengan baris 19k, phpmyadmin memutuskan untuk melakukan count(*)alih - alih hanya memberikan estimasi.

Pertanyaannya adalah, adakah cara untuk menghentikan phpmyadmin dari melakukan penghitungan seperti itu di tabel innodb saya? Tidak apa-apa untuk hanya memberikan estimasi alih-alih melakukan hitungan baris mahal setiap kali saya menyegarkan layar phpmyadmin saya.

RolandoMySQLDBA
sumber
Pikir saya menemukan jawabannya. Ada $ cfg ['MaxExactCount'] = 20000; dalam pengaturan phpmyadmin. Hanya baris lebih dari 20k yang akan memberikan perkiraan. Pertanyaan saya berikutnya adalah, di mana saya mengedit $ cfg ['MaxExactCount']?
@ Kenny, Cukup timpa nilainya 20000dengan angka yang lebih kecil, mis. 300, Simpan file, segarkan phpmyadmin dan Anda siap berangkat.
Pacerier

Jawaban:

3

Edit config.inc.php, dan ubah pengaturan untuk MaxExactCount .

$ cfg ['MaxExactCount']
    Jenis: integer
    Nilai default: 500000

Untuk tabel InnoDB, tentukan untuk berapa tabel besar phpMyAdmin harus mendapatkan 
jumlah baris yang tepat menggunakan SELECT COUNT. Jika perkiraan baris dihitung sebagai dikembalikan
oleh SHOW TABLE STATUS lebih kecil dari nilai ini, SELECT COUNT akan digunakan, 
jika tidak, jumlah perkiraan akan digunakan.
Mike Sherrill 'Cat Recall'
sumber
Tautkan ke bawah ............
Pacerier
@Pacerier: Tautan yang lebih baik.
Mike Sherrill 'Cat Recall'
1
Ah, sekarang Anda membuat jawaban saya berlebihan .......
Pacerier
1

phpMyAdmin hanya akan melakukan aktual select count(*) jika perkiraan jumlah baris berada dalam ambang batas yang ditetapkan (standarnya adalah 500 ribu tergantung pada versi Anda):

$cfg['MaxExactCount']

Untuk tabel InnoDB, tentukan berapa tabel besar phpMyAdmin harus mendapatkan jumlah baris yang tepat SELECT COUNT. Jika perkiraan jumlah baris yang dikembalikan oleh SHOW TABLE STATUSlebih kecil dari nilai ini, SELECT COUNTakan digunakan, jika tidak, perkiraan jumlah akan digunakan.

Cukup atur ambang ke angka yang lebih kecil untuk menghindari pointless select count(*)s.

Pacerier
sumber