Ada sebuah artikel yang menunjukkan bahwa COUNT(1)
pada Oracle adalah hanya sebuah alias untuk COUNT(*)
, dengan bukti tentang itu.
Saya akan mengutip beberapa bagian:
Ada bagian dari perangkat lunak basis data yang disebut "Pengoptimal", yang didefinisikan dalam dokumentasi resmi sebagai "perangkat lunak basis data bawaan yang menentukan cara paling efisien untuk menjalankan pernyataan SQL".
Salah satu komponen dari pengoptimal disebut "transformator", yang perannya adalah menentukan apakah menguntungkan untuk menulis ulang pernyataan SQL asli menjadi pernyataan SQL yang setara secara semantik yang bisa lebih efisien.
Apakah Anda ingin melihat apa yang dilakukan pengoptimal ketika Anda menulis kueri menggunakan COUNT (1)?
Dengan pengguna dengan ALTER SESSION
hak istimewa, Anda dapat menempatkan sebuah tracefile_identifier
, memungkinkan tracing optimizer dan menjalankan COUNT(1)
pilih, seperti: SELECT /* test-1 */ COUNT(1) FROM employees;
.
Setelah itu, Anda perlu melokalkan file jejak, apa yang bisa dilakukan SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Diag Trace';
. Kemudian pada file, Anda akan menemukan:
SELECT COUNT(*) “COUNT(1)” FROM “COURSE”.”EMPLOYEES” “EMPLOYEES”
Seperti yang Anda lihat, itu hanya alias untuk COUNT(*)
.
Komentar penting lainnya: Oracle COUNT(*)
benar-benar lebih cepat dua dekade yang lalu , sebelum Oracle 7.3:
Hitung (1) telah ditulis ulang dalam hitung (*) sejak 7.3 karena Oracle suka dengan pernyataan mitos Auto-tune. Dalam Oracle7 sebelumnya, oracle harus mengevaluasi (1) untuk setiap baris, sebagai fungsi, sebelum DETERMINISTIC dan NON-DETERMINISTIC ada.
Jadi dua dekade lalu, hitungan (*) lebih cepat
Untuk database lain sebagai Sql Server, itu harus diteliti secara individual untuk masing-masing.
Saya tahu bahwa pertanyaan ini khusus untuk Sql Server, tetapi pertanyaan lain pada SO tentang subjek yang sama, tanpa menyebutkan database, ditutup dan ditandai sebagai duplikat dari jawaban ini.