Saya ingin cara cepat untuk menghitung jumlah baris di meja saya yang memiliki beberapa juta baris. Saya menemukan posting " MySQL: Cara tercepat untuk menghitung jumlah baris " di Stack Overflow, yang sepertinya akan menyelesaikan masalah saya. Bayuah memberikan jawaban ini:
SELECT
table_rows "Rows Count"
FROM
information_schema.tables
WHERE
table_name="Table_Name"
AND
table_schema="Database_Name";
Yang saya sukai karena itu terlihat seperti pencarian bukan pemindaian, jadi harus cepat, tapi saya memutuskan untuk mengujinya
SELECT COUNT(*) FROM table
untuk melihat seberapa besar perbedaan kinerja yang ada.
Sayangnya saya mendapat jawaban berbeda seperti yang ditunjukkan di bawah ini:
Pertanyaan
Mengapa jawabannya berbeda sekitar 2 juta baris? Saya menebak permintaan yang melakukan pemindaian tabel penuh adalah angka yang lebih akurat, tetapi apakah ada cara saya bisa mendapatkan nomor yang benar tanpa harus menjalankan permintaan lambat ini?
Saya berlari ANALYZE TABLE data_302
, yang selesai dalam 0,05 detik. Ketika saya menjalankan kueri lagi, saya sekarang mendapatkan hasil yang jauh lebih dekat dari 34384599 baris, tetapi itu masih tidak sama select count(*)
dengan 34906061 baris. Apakah tabel analisis segera kembali dan diproses di latar belakang? Saya merasa layak menyebutkan ini adalah database pengujian dan saat ini sedang tidak ditulis.
Tidak ada yang akan peduli jika itu hanya kasus memberitahu seseorang seberapa besar sebuah tabel, tapi saya ingin meneruskan jumlah baris ke sedikit kode yang akan menggunakan angka itu untuk membuat kueri asinkron yang "berukuran sama" untuk menanyakan database. secara paralel, mirip dengan metode yang ditunjukkan dalam Meningkatkan kinerja permintaan lambat dengan eksekusi permintaan paralel oleh Alexander Rubin. Karena itu, saya hanya akan mendapatkan id tertinggi SELECT id from table_name order by id DESC limit 1
dan berharap meja saya tidak terlalu terfragmentasi.
NUM_ROWS
Colum