Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Perbedaan antara count(1) dan count(*) di oracle

Saya percaya count(1) dulu lebih cepat di versi Oracle yang lebih lama. Tapi sekarang, saya cukup yakin pengoptimalnya cukup pintar untuk mengetahui bahwa count(*) dan count(1) berarti Anda menginginkan jumlah baris dan membuat rencana eksekusi yang sesuai.

Ini dia:

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

Jadi tidak hanya cukup pintar untuk mengetahui bahwa ia dapat menggunakan indeks untuk mengoptimalkan kueri ini, tetapi juga menggunakan rencana eksekusi yang sama persis untuk versi yang berbeda (paket tersebut memiliki nilai yang sama).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengecualian yang ditentukan pengguna dengan pesan khusus

  2. bantuan oracle hilang koma

  3. Kueri berfungsi di Oracle 11g tetapi gagal di Oracle 8i

  4. Oracle:menggabungkan dua kueri berbeda menjadi satu, LIKE &IN

  5. luapan numerik dengan kolom NULL (0,3)