Wygląda na to, że liczba (*) jest mniejsza niż NUM_ROWS. Czy eksperci w tej dziedzinie mogą rzucić trochę światła na to.Liczba wierszy Oracle według tabeli według liczby (*) kontra NUM_ROWS od DBA_TABLES
Odpowiedz
1) Uzyskanie NUM_ROWS z poniższej kwerendy oznacza, że żadna z wartości wierszy nie jest aktualizowana przez DBMS_STATS. Nie zawiera więc bieżącej liczby wierszy w tabeli, ale przybliżenie obliczone podczas ostatniego uruchomienia DBMS_STATS.
SELECT table_name,
num_rows
FROM dba_tables
WHERE TABLE_NAME='NAME'
Aby zaktualizować ostatnią wartość liczby wierszy w widoku DBA_TABLES
wykonać
exec dbms_stats.gather_schema_stats(ownname => 'NAME');
2) count (*) powołuje się na wyliczenia nie. wierszy ze stołu.
Aby zobaczyć, jak świeże są twoje statystyki, dodaj: LAST_ANALYZED' do zapytania o. –
'' num_rows' może być wartością szacunkową, a nie dokładną, szczególnie jeśli nie określisz parametru "estimate_percent" wywołania gather_schema_stats. –
Zgodnie z the documentation NUM_ROWS jest "Liczba wierszy w tabeli", więc mogę zobaczyć, jak może to być mylące. Istnieje jednak zasadnicza różnica między tymi dwoma metodami.
To zapytanie wybiera liczbę wierszy w MY_TABLE z widoku systemowego. Są to dane zebrane i przechowywane przez firmę Oracle.
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ą kawałki różnicy danych. Są jeszcze dwie dodatkowe informacje o NUM_ROWS.
W dokumentacji jest gwiazdka przy nazwie kolumny, co prowadzi do niniejszej noty:
Kolumny oznaczone gwiazdką (*) są wypełniane tylko jeśli zbierać statystyk na stole instrukcja ANALYZE lub pakiet DBMS_STATS .
Oznacza to, że jeśli nie zebrano statystyk dotyczących tabeli, ta kolumna nie będzie zawierała żadnych danych.
Statystyki zebrane w 11g + z domyślną wartością
estimate_percent
lub ze 100% szacunkową zwrócą dokładną liczbę dla tego punktu w czasie. Jednak statystyki zebrane przed 11g lub z niestandardowymestimate_percent
mniej niż 100% używa dynamicznego próbkowania i mogą być nieprawidłowe. Jeśli zbierzesz 99,999%, jeden rząd może zostać pominięty, co z kolei oznacza, że otrzymana odpowiedź jest niepoprawna.
Jeśli tabela jest nigdy zaktualizowany wtedy na pewno jest możliwe użycie ALL_TABLES.NUM_ROWS aby dowiedzieć się liczbę wierszy w tabeli. Jednak, i to jest duże, jeśli jakikolwiek proces wstawia lub usuwa wiersze z tabeli, będzie to w najlepszym razie dobre przybliżenie iw zależności od tego, czy twoja baza danych zbierze statystyki automatycznie może być okropnie nie tak.
Ogólnie rzecz biorąc, zawsze lepiej jest faktycznie policzyć liczbę wierszy w tabeli, a następnie opierając się na tabelach systemowych.
- 1. SQL: Grupuj według liczby (*) jako procent całkowitej liczby wierszy tabeli
- 2. Liczba grupy według wierszy w hibernacji kryteriów
- 3. NSCountedSet kolejność według liczby
- 4. GROUP Według liczby wierszy zwróconych przez GROUP BY w MySQL
- 5. efektywna liczba różnych w kolumnach DataFrame, pogrupowanych według wierszy
- 6. Algorytm sortowania wierszy i colów według podobieństwa
- 7. Grupowanie według roku obrachunkowego (Oracle)
- 8. angularjs: liczba Format według lokalizacji
- 9. Przygotowane instrukcje - liczba wierszy
- 10. Liczba wierszy SQL w tabeli
- 11. Panda segmentów DataFrame według wierszy
- 12. Zwróć liczbę wierszy pogrupowanych według tygodnia MySQL
- 13. identyfikuj grupę według grupy kontra z wyprzedzeniem
- 14. SQL: Czy można "grupować według" według wyników funkcji "podobnych"?
- 15. R: liczba unikalnych wartości według kategorii
- 16. Railsy gem meta_search: sortowanie według liczby powiązanych modeli
- 17. Przypadek ignorowania SQL w grupie według? (oracle)
- 18. Grupa według partycji Partycja w Oracle
- 19. Maksymalna liczba wierszy w tabeli sqlite?
- 20. MYSQL - liczba wierszy w każdej tabeli
- 21. Datatable wybierz według zakresu wierszy C#
- 22. Wybierz różne grupy wierszy według średniej
- 23. Hrabia i sortować według liczby wystąpień
- 24. Replikacja tablic zgodna z elementami według liczby
- 25. Jak sortować według liczby z postgresql?
- 26. Jak oddzielić dane przemiennika według liczby pozycji
- 27. Lewe wyrażenie złączenia i liczba wierszy zwróconych przez Oracle
- 28. "Sortuj według" wyniku "liczenia według grup"?
- 29. Uzyskiwanie liczby wierszy dla tabeli w MySQL?
- 30. Znaczenie według współczynnika według poziomu
num_rows to statystyka, która może nie być aktualna. jeśli potrzebujesz rzeczywistego liczenia, powinieneś pójść przeciwko samej tabeli z liczbą (*) – Randy
Nie przetestowałem tego, ale czytałem gdzieś, że 'count (1)' jest szybsze niż 'count (*)'. –
@Paul Tomblin - była obszerna dyskusja Ask Tom o tym, że obalili ten pomysł. to jest to samo. – Randy