Oracle
 sql >> база данни >  >> RDS >> Oracle

Разлика между count(1) и count(*) в Oracle

Вярвам, че count(1) беше по-бърз в по-старите версии на Oracle. Но досега съм почти сигурен, че оптимизаторът е достатъчно умен, за да знае, че count(*) и count(1) означава, че искате броя на редовете и създавате подходящ план за изпълнение.

Ето го:

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

Така че не само е достатъчно умен, за да знае, че може да използва индекса, за да оптимизира тази заявка, но използва абсолютно същия план за изпълнение за различните версии (планът има една и съща стойност).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция SQRT() в Oracle

  2. Динамичен курсор Oracle

  3. Непоследователно транспониране

  4. Oracle SYS_REFCURSOR не може да използва като тип на връщане

  5. Oracle - Как да създам таблица, която има автоматично увеличаващ се уникален ключ за ID