Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Unterschied zwischen count(1) und count(*) in Oracle

Ich glaube count(1) war früher in älteren Versionen von Oracle schneller. Aber inzwischen bin ich mir ziemlich sicher, dass der Optimierer intelligent genug ist, um diesen count(*) zu kennen und count(1) bedeutet, Sie möchten die Anzahl der Zeilen und erstellt einen entsprechenden Ausführungsplan.

Bitte schön:

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

Es ist also nicht nur schlau genug zu wissen, dass es den Index verwenden kann, um diese Abfrage zu optimieren, sondern es verwendet auch den exakt gleichen Ausführungsplan für die verschiedenen Versionen (der Plan hat den gleichen Wert).