Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Jumlah baris Oracle tabel dengan count(*) vs NUM_ROWS dari DBA_TABLES

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.

  1. 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.

  2. 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 dengan estimate_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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memanggil fungsi Oracle dengan Kursor Ref sebagai parameter Keluar dari C #?

  2. Cara mengembalikan patch setelah fase cutover gagal di R12.2

  3. ORA-01034:ORACLE tidak tersedia ORA-27101:ranah memori bersama tidak ada

  4. Buat Ulang Node RAC Buruk

  5. MONTHS_BETWEEN() Fungsi di Oracle