Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Liczba wierszy Oracle w tabeli według liczby (*) vs NUM_ROWS z DBA_TABLES

Zgodnie z dokumentacją NUM_ROWS to „Liczba wierszy w tabeli” , więc widzę, jak to może być mylące. Istnieje jednak zasadnicza różnica między tymi dwiema metodami.

To zapytanie wybiera liczbę wierszy w MY_TABLE z widoku systemowego. Są to dane, które Oracle wcześniej zgromadził i przechowywał.

select num_rows from all_tables where table_name = 'MY_TABLE'

To zapytanie zlicza aktualną liczbę wierszy w MY_TABLE

select count(*) from my_table

Z definicji są to różne fragmenty danych. Potrzebujesz dwóch dodatkowych informacji o NUM_ROWS.

  1. W dokumentacji przy nazwie kolumny znajduje się gwiazdka, która prowadzi do tej notatki:

    Kolumny oznaczone gwiazdką (*) są wypełniane tylko wtedy, gdy zbierasz statystyki w tabeli za pomocą instrukcji ANALYZE lub pakietu DBMS_STATS.

    Oznacza to, że jeśli nie zebrałeś statystyk w tabeli, ta kolumna nie będzie zawierała żadnych danych.

  2. Statystyki zebrane w 11g+ z domyślnym estimate_percent lub z oszacowaniem 100% zwróci dokładną liczbę dla tego momentu. Ale statystyki zebrane przed 11g lub z niestandardowym estimate_percent mniej niż 100%, wykorzystuje próbkowanie dynamiczne i może być nieprawidłowe. Jeśli zbierzesz 99,999%, pojedynczy wiersz może zostać pominięty, co z kolei oznacza, że ​​otrzymana odpowiedź jest nieprawidłowa.

Jeśli Twój stół jest nigdy zaktualizowane, z pewnością można użyć ALL_TABLES.NUM_ROWS, aby sprawdzić liczbę wierszy w tabeli. Jednak , i jest to duże, jednak jeśli jakikolwiek proces wstawi lub usunie wiersze z twojej tabeli, będzie to w najlepszym razie dobre przybliżenie i zależnie od tego, czy twoja baza danych gromadzi statystyki automatycznie, może być strasznie błędne.

Ogólnie rzecz biorąc, zawsze lepiej jest policzyć liczbę wierszy w tabeli, niż polegać na tabelach systemowych.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Narzędzia programistyczne umożliwiające bezpośredni dostęp do baz danych

  2. Problem z budowaniem cx_Oracle - libclntsh.so.11.1 => nie znaleziono

  3. Jak używać wykonania natychmiastowego z klauzulą ​​INTO w bazie danych Oracle

  4. UPDATE z CASE i IN - Oracle

  5. Konfiguracja źródła danych Oracle dla Spring