sql >> Databasteknik >  >> RDS >> Oracle

Skillnad mellan count(1) och count(*) i orakel

Jag tror att count(1) brukade vara snabbare i äldre versioner av Oracle. Men vid det här laget är jag ganska säker på att optimeraren är smart nog att veta det count(*) och count(1) innebär att du vill ha antalet rader och skapar en lämplig utförandeplan.

Varsågod:

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

Så det är inte bara smart nog att veta att det kan använda indexet för att optimera denna fråga, utan det använder exakt samma exekveringsplan för de olika versionerna (planen har samma värde).



  1. hur lagrar jag java datumtyp till mysql datumtyp?

  2. Hur kan jag rekursivt få det överordnade ID:t för rader i denna MySQL-tabell?

  3. pg_restore Alternatives - PostgreSQL-säkerhetskopiering och automatisk återställning med ClusterControl

  4. Undvikande enstaka citattecken i skalet för postgresql