Oracle
 sql >> база данни >  >> RDS >> Oracle

Брой редове на Oracle на таблица по брой (*) спрямо NUM_ROWS от DBA_TABLES

Според документацията NUM_ROWS е „Броят редове в таблицата“ , така че мога да видя как това може да е объркващо. Между тези два метода обаче има голяма разлика.

Тази заявка избира броя на редовете в MY_TABLE от системен изглед. Това са данни, които Oracle преди това е събирал и съхранявал.

select num_rows from all_tables where table_name = 'MY_TABLE'

Тази заявка отчита текущия брой редове в MY_TABLE

select count(*) from my_table

По дефиниция те са различни части от данни. Има две допълнителни информация, от която се нуждаете за NUM_ROWS.

  1. В документацията има звездичка до името на колоната, която води до тази бележка:

    Колоните, маркирани със звездичка (*), се попълват само ако събирате статистически данни в таблицата с израза ANALYZE или пакета DBMS_STATS.

    Това означава, че освен ако не сте събрали статистически данни в таблицата, тази колона няма да има никакви данни.

  2. Статистически данни, събрани в 11g+ с estimate_percent по подразбиране , или със 100% оценка, ще върне точно число за този момент от време. Но статистическите данни, събрани преди 11g, или с персонализиран estimate_percent по-малко от 100%, използва динамично вземане на проби и може да е неправилно. Ако съберете 99,999% един ред може да бъде пропуснат, което от своя страна означава, че отговорът, който получавате, е неправилен.

Ако вашата маса е никога актуализирано, тогава със сигурност е възможно да използвате ALL_TABLES.NUM_ROWS, за да разберете броя на редовете в таблица. Въпреки това , и това е голямо обаче, ако някой процес вмъкне или изтрие редове от вашата таблица, това в най-добрия случай ще бъде добро приближение и в зависимост от това дали вашата база данни събира статистически данни автоматично може да бъде ужасно погрешно.

Най-общо казано, винаги е по-добре действително да преброите броя на редовете в таблицата, вместо да разчитате на системните таблици.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да убия всички сесии, свързващи се с моята база данни на Oracle?

  2. Защо не мога да въведа тази дата в таблица с помощта на sql?

  3. Разлика между BYTE и CHAR в типовете данни на колоните

  4. Как мога да направя пакетно вмъкване в база данни на Oracle с помощта на Python?

  5. ORA-4031 грешки с Direct NFS