sql >> Databáze >  >> RDS >> Oracle

Rozdíl mezi count(1) a count(*) v orákulu

Věřím, že count(1) býval rychlejší ve starších verzích Oracle. Ale teď jsem si docela jistý, že optimalizátor je dostatečně chytrý, aby věděl, že count(*) a count(1) znamená, že chcete počet řádků a vytvoříte vhodný plán provádění.

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

Nejenže je tedy dostatečně chytrý, aby věděl, že může použít index k optimalizaci tohoto dotazu, ale používá přesně stejný plán provádění pro různé verze (plán má stejnou hodnotu).



  1. Chcete dát limit MySql na každou podmínku kde

  2. Oracle UpdateXML() mění strukturu XML?

  3. Načítání obrovských dat z Oracle v Pythonu

  4. jak zvýšit délku výstupu sloupce sqlplus?