sql >> Database teknologi >  >> RDS >> Oracle

Forskellen mellem count(1) og count(*) i orakel

Jeg tror på count(1) plejede at være hurtigere i ældre versioner af Oracle. Men efterhånden er jeg ret sikker på, at optimeringsværktøjet er smart nok til at vide, at count(*) og count(1) betyder, at du vil have antallet af rækker og opretter en passende udførelsesplan.

Her går du:

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 er ikke kun smart nok til at vide, at det kan bruge indekset til at optimere denne forespørgsel, men det bruger nøjagtig den samme udførelsesplan for de forskellige versioner (planen har værdi er den samme).



  1. Problemer med at forbinde Pentaho Kettle/Spoon til Heroku PostgreSQL ved hjælp af SSL

  2. Indlejret Vælg ved hjælp af Zend Db

  3. hvordan får man PL/SQL i SQLFiddle?

  4. MySQL - Hent rækkeværdi fra forskellige tabeller afhængigt af rækkeværdien i en tabel