sql >> Databasteknik >  >> RDS >> Oracle

Oracle radantal av tabell efter antal(*) mot NUM_ROWS från DBA_TABLES

Enligt dokumentationen är NUM_ROWS "Antal rader i tabellen" , så jag kan se hur detta kan vara förvirrande. Det finns dock en stor skillnad mellan dessa två metoder.

Den här frågan väljer antalet rader i MY_TABLE från en systemvy. Detta är data som Oracle tidigare har samlat in och lagrat.

select num_rows from all_tables where table_name = 'MY_TABLE'

Den här frågan räknar det aktuella antalet rader i MY_TABLE

select count(*) from my_table

Per definition är de olika databitar. Det finns ytterligare två uppgifter du behöver om NUM_ROWS.

  1. I dokumentationen finns en asterisk vid kolumnnamnet, vilket leder till denna anteckning:

    Kolumner markerade med en asterisk (*) fylls bara i om du samlar in statistik i tabellen med ANALYZE-satsen eller DBMS_STATSpackage.

    Det betyder att om du inte har samlat statistik på tabellen så kommer denna kolumn inte att ha några data.

  2. Statistik samlad i 11g+ med standardvärdet estimate_percent , eller med en uppskattning på 100 %, returnerar ett korrekt antal för den tidpunkten. Men statistik samlad in före 11g, eller med en anpassad estimate_percent mindre än 100 %, använder dynamisk sampling och kan vara felaktig. Om du samlar 99,999 % kan en enskild rad missas, vilket i sin tur betyder att svaret du får är felaktigt.

Om ditt bord är aldrig uppdateras så är det säkert möjligt att använda ALL_TABLES.NUM_ROWS för att ta reda på antalet rader i en tabell. Men , och det är en stor men om någon process infogar eller tar bort rader från din tabell kommer det i bästa fall att vara en bra uppskattning och beroende på om din databas samlar in statistik automatiskt kan det vara fruktansvärt fel.

Generellt sett är det alltid bättre att faktiskt räkna antalet rader i tabellen istället för att förlita sig på systemtabellerna.




  1. INFORMATION_SCHEMA vs sysobjects

  2. Vilken är ordningen på poster i en tabell med en sammansatt primärnyckel

  3. Hur importerar jag CSV-fil till en MySQL-tabell?

  4. Postgres sql infoga frågesyntaxfel från phpPgAdmin