Menurut dokumentasi NUM_ROWS adalah "Jumlah baris dalam tabel" , jadi saya bisa melihat bagaimana ini mungkin membingungkan. Namun, ada perbedaan besar antara kedua metode ini.
Kueri ini memilih jumlah baris dalam MY_TABLE dari tampilan sistem. Ini adalah data yang telah dikumpulkan dan disimpan Oracle sebelumnya.
select num_rows from all_tables where table_name = 'MY_TABLE'
Kueri ini menghitung jumlah baris saat ini di MY_TABLE
select count(*) from my_table
Menurut definisi mereka adalah potongan data yang berbeda. Ada dua informasi tambahan yang Anda butuhkan tentang NUM_ROWS.
-
Dalam dokumentasi ada tanda bintang dengan nama kolom, yang mengarah ke catatan ini:
Kolom bertanda asterisk (*) diisi hanya jika Anda mengumpulkan statistik pada tabel dengan pernyataan ANALYZE atau paket DBMS_STATS.
Artinya, kecuali Anda telah mengumpulkan statistik di tabel, kolom ini tidak akan memiliki data apa pun.
-
Statistik dikumpulkan dalam 11g+ dengan
estimate_percent
default , atau dengan perkiraan 100%, akan mengembalikan angka yang akurat untuk saat itu. Tetapi statistik dikumpulkan sebelum 11g, atau denganestimate_percent
khusus kurang dari 100%, menggunakan sampling dinamis dan mungkin salah. Jika Anda mengumpulkan 99,999% satu baris mungkin terlewatkan, yang pada gilirannya berarti jawaban yang Anda dapatkan salah.
Jika meja Anda tidak pernah diperbarui maka tentu dimungkinkan untuk menggunakan ALL_TABLES.NUM_ROWS untuk mengetahui jumlah baris dalam sebuah tabel. Namun , dan ini adalah masalah besar, jika ada proses yang menyisipkan atau menghapus baris dari tabel Anda, itu akan menjadi perkiraan terbaik dan tergantung pada apakah database Anda mengumpulkan statistik secara otomatis bisa jadi sangat salah.
Secara umum, selalu lebih baik untuk benar-benar menghitung jumlah baris dalam tabel daripada mengandalkan tabel sistem.