sql >> Database >  >> RDS >> Oracle

Oracle-rijtelling van tabel per telling(*) versus NUM_ROWS van DBA_TABLES

Volgens de documentatie is NUM_ROWS het "Aantal rijen in de tabel" , dus ik kan zien hoe dit verwarrend kan zijn. Er is echter een groot verschil tussen deze twee methoden.

Deze query selecteert het aantal rijen in MY_TABLE vanuit een systeemweergave. Dit zijn gegevens die Oracle eerder heeft verzameld en opgeslagen.

select num_rows from all_tables where table_name = 'MY_TABLE'

Deze zoekopdracht telt het huidige aantal rijen in MY_TABLE

select count(*) from my_table

Het zijn per definitie verschillende stukjes data. Er zijn twee extra stukjes informatie die je nodig hebt over NUM_ROWS.

  1. In de documentatie staat een asterisk bij de kolomnaam, wat leidt tot deze opmerking:

    Kolommen gemarkeerd met een asterisk (*) worden alleen ingevuld als u statistieken op de tabel verzamelt met de ANALYZE-instructie of het DBMS_STATS-pakket.

    Dit betekent dat, tenzij u statistieken over de tabel heeft verzameld, deze kolom geen gegevens zal bevatten.

  2. Statistieken verzameld in 11g+ met de standaard estimate_percent , of met een schatting van 100%, een nauwkeurig getal voor dat tijdstip teruggeeft. Maar statistieken verzameld vóór 11g, of met een aangepaste estimate_percent minder dan 100%, maakt gebruik van dynamische bemonstering en is mogelijk onjuist. Als u 99,999% verzamelt, kan een enkele rij worden gemist, wat op zijn beurt betekent dat het antwoord dat u krijgt onjuist is.

Als uw tafel nooit is bijgewerkt, dan is het zeker mogelijk om ALL_TABLES.NUM_ROWS te gebruiken om het aantal rijen in een tabel te achterhalen. Echter , en het is echter een grote, als een proces rijen invoegt of verwijdert uit uw tabel, is dit op zijn best een goede benadering en afhankelijk van of uw database automatisch statistieken verzamelt, kan het vreselijk verkeerd zijn.

Over het algemeen is het altijd beter om het aantal rijen in de tabel te tellen in plaats van te vertrouwen op de systeemtabellen.




  1. Fix "ERROR: elke BEHALVE query moet hetzelfde aantal kolommen hebben" in PostgreSQL

  2. waarom kan ik deze tabel niet maken op Android SQLite?

  3. Sorteren op pagina's toevoegen en zoeken met jQuery datatable

  4. Hoe de werknemers bij hun managers te krijgen?