sql >> Database >  >> RDS >> Oracle

Verschil tussen count(1) en count(*) in orakel

Ik geloof dat count(1) was vroeger sneller in oudere versies van Oracle. Maar inmiddels ben ik er vrij zeker van dat de optimizer slim genoeg is om te weten dat count(*) en count(1) betekent dat u het aantal rijen wilt en een passend uitvoeringsplan maakt.

Hier ga je:

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

Het is dus niet alleen slim genoeg om te weten dat het de index kan gebruiken om deze zoekopdracht te optimaliseren, maar het gebruikt exact hetzelfde uitvoeringsplan voor de verschillende versies (het plan heeft dezelfde waarde).



  1. Converteer UUID naar/van binair in Node

  2. Dapper - bel Oracle schema.package.function

  3. Begrip casten van bytea naar oid

  4. MySQL MONTH() ophalen om voorloopnullen te gebruiken?