Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Số hàng trong bảng Oracle theo số lượng (*) so với NUM_ROWS từ DBA_TABLES

Theo tài liệu NUM_ROWS là "Số hàng trong bảng" , vì vậy tôi có thể thấy điều này có thể gây nhầm lẫn như thế nào. Tuy nhiên, ở đó có sự khác biệt lớn giữa hai phương pháp này.

Truy vấn này chọn số hàng trong MY_TABLE từ chế độ xem hệ thống. Đây là dữ liệu mà Oracle đã thu thập và lưu trữ trước đó.

select num_rows from all_tables where table_name = 'MY_TABLE'

Truy vấn này đếm số hàng hiện tại trong MY_TABLE

select count(*) from my_table

Theo định nghĩa, chúng là những phần dữ liệu khác biệt. Có hai thông tin bổ sung bạn cần về NUM_ROWS.

  1. Trong tài liệu có một dấu hoa thị theo tên cột, dẫn đến lưu ý này:

    Các cột được đánh dấu bằng dấu hoa thị (*) chỉ được điền khi bạn thu thập số liệu thống kê trên bảng với câu lệnh ANALYZE hoặc DBMS_STATSpackage.

    Điều này có nghĩa là trừ khi bạn đã thu thập số liệu thống kê trên bảng thì cột này sẽ không có bất kỳ dữ liệu nào.

  2. Thống kê được thu thập trong 11g + với estimate_percent mặc định hoặc với ước tính 100%, sẽ trả về một con số chính xác cho thời điểm đó. Nhưng số liệu thống kê được thu thập trước 11g hoặc với estimate_percent tùy chỉnh dưới 100%, sử dụng lấy mẫu động và có thể không chính xác. Nếu bạn tập hợp 99,999%, một hàng có thể bị bỏ sót, điều này có nghĩa là câu trả lời bạn nhận được là không chính xác.

Nếu bảng của bạn không bao giờ đã cập nhật thì chắc chắn có thể sử dụng ALL_TABLES.NUM_ROWS để tìm ra số hàng trong bảng. Tuy nhiên và nó là một điều lớn, tuy nhiên, nếu bất kỳ quá trình nào chèn hoặc xóa các hàng khỏi bảng của bạn, thì tốt nhất nó sẽ là một con số gần đúng tốt và tùy thuộc vào việc cơ sở dữ liệu của bạn tự động thu thập thống kê có thể sai khủng khiếp.

Nói chung, luôn luôn tốt hơn nếu thực sự đếm số hàng trong bảng hơn là dựa vào các bảng hệ thống.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thêm ký hiệu tiền tệ £, $ vào các trường ORACLE nhất định

  2. thông báo lỗi sqldeveloper:Bộ điều hợp mạng không thể thiết lập lỗi kết nối

  3. oracle plsql:cách phân tích cú pháp XML và chèn vào bảng

  4. Oracle PL / SQL - Tăng ngoại lệ do người dùng xác định với SQLERRM tùy chỉnh

  5. Những thay đổi chính về Công nghệ trong E-Business Suite 12.2