Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Różnica między count(1) i count(*) w Oracle

Wierzę, że count(1) był szybszy w starszych wersjach Oracle. Ale teraz jestem prawie pewien, że optymalizator jest wystarczająco sprytny, aby wiedzieć, że count(*) i count(1) oznacza, że ​​chcesz liczbę wierszy i tworzysz odpowiedni plan wykonania.

Proszę bardzo:

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 |
-----------------------------------------------------------------------------------------

Jest więc nie tylko wystarczająco sprytny, aby wiedzieć, że może użyć indeksu do optymalizacji tego zapytania, ale używa dokładnie tego samego planu wykonania dla różnych wersji (plan ma taką samą wartość).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sposób na znalezienie / odzyskanie nazwy użytkownika Windows w Oracle APEX

  2. Jak zamienić kolumnę na rzędy w Oracle 10g

  3. Jak mogę usunąć ograniczenie o wartości niezerowej w Oracle, jeśli nie znam nazwy ograniczenia?

  4. Wyjaśnienie BLOB i CLOB

  5. Korzystanie z OraclePreparedStatement z połączeniem DBCP