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

Sự khác biệt giữa số đếm (1) và số đếm (*) trong tiên tri

Tôi tin rằng count(1) được sử dụng để nhanh hơn trong các phiên bản cũ của Oracle. Nhưng bây giờ, tôi khá chắc chắn rằng trình tối ưu hóa đủ thông minh để biết rằng count(*)count(1) nghĩa là bạn muốn số hàng và tạo một kế hoạch thực thi thích hợp.

Của bạn đây:

create table t as select * from all_objects;

Table T created.

create index tindx on t( object_name );

Index TINDX created.

select count(*) from t;

  COUNT(*)
----------
     21534

select * from table(dbms_xplan.display_cursor( NULL, NULL, 'allstats last' ));

Plan hash value: 2940353011

--------------------------------------------------------------------------------------------------
| Id  | Operation             | Name  | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |
--------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |       |      1 |        |      1 |00:00:00.01 |     100 |     93 |
|   1 |  SORT AGGREGATE       |       |      1 |      1 |      1 |00:00:00.01 |     100 |     93 |
|   2 |   INDEX FAST FULL SCAN| TINDX |      1 |  18459 |  21534 |00:00:00.01 |     100 |     93 |
--------------------------------------------------------------------------------------------------

select count(1) from t;

  COUNT(1)
----------
     21534

Plan hash value: 2940353011

-----------------------------------------------------------------------------------------
| Id  | Operation             | Name  | Starts | E-Rows | A-Rows |   A-Time   | Buffers |
-----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |       |      1 |        |      1 |00:00:00.01 |     100 |
|   1 |  SORT AGGREGATE       |       |      1 |      1 |      1 |00:00:00.01 |     100 |
|   2 |   INDEX FAST FULL SCAN| TINDX |      1 |  18459 |  21534 |00:00:00.01 |     100 |
-----------------------------------------------------------------------------------------

Vì vậy, nó không chỉ đủ thông minh để biết nó có thể sử dụng chỉ mục để tối ưu hóa truy vấn này mà còn sử dụng cùng một kế hoạch thực thi chính xác cho các phiên bản khác nhau (kế hoạch có giá trị như nhau).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi cần thoát những gì khi gửi truy vấn?

  2. Chỉ cho phép đăng nhập oracle db vào ứng dụng cụ thể?

  3. Làm cách nào để ngăn kết nối tự động định kỳ với cơ sở dữ liệu Oracle?

  4. Gặp phải lỗi SQL:ORA-01843:không phải là tháng hợp lệ

  5. Tìm kiếm một giá trị trong giá trị cột lưu trữ các giá trị được phân tách bằng dấu phẩy