Di SQL Server, COUNT_BIG()
fungsi dan COUNT()
melakukan hal yang pada dasarnya sama:mengembalikan jumlah item yang ditemukan dalam grup. Pada dasarnya, Anda dapat menggunakan fungsi ini untuk mengetahui berapa banyak baris dalam tabel atau kumpulan hasil.
Dalam banyak kasus, Anda akan dapat memilih mana yang Anda inginkan. Namun, ada perbedaan antara kedua fungsi ini yang mungkin mengharuskan Anda untuk menggunakan salah satunya.
Perbedaannya adalah COUNT()
mengembalikan hasilnya sebagai int , sedangkan COUNT_BIG()
mengembalikan hasilnya sebagai besar .
Dengan kata lain, Anda harus menggunakan COUNT_BIG()
jika Anda mengharapkan hasilnya lebih besar dari 2.147.483.647 (yaitu jika kueri mengembalikan lebih dari 2.147.483.647 baris).
Contoh 1 – Ketika COUNT() OK
Berikut adalah contoh dasar yang menunjukkan skenario di mana keduanya COUNT()
dan COUNT_BIG()
dapat digunakan:
USE WideWorldImportersDW; SELECT COUNT(*) AS 'COUNT', COUNT_BIG(*) AS 'COUNT_BIG' FROM Fact.[Order];
Hasil:
+---------+-------------+ | COUNT | COUNT_BIG | |---------+-------------| | 231412 | 231412 | +---------+-------------+
Kita dapat melihat bahwa ada 231412 baris di Fact.[Order] tabel.
Dalam hal ini, kedua fungsi dapat menanganinya, karena jumlah baris cukup kecil untuk disimpan dalam int serta besar .
Namun, jika hasilnya sangat besar sehingga int tidak dapat menyimpannya, maka kami hanya dapat menggunakan COUNT_BIG()
.
Contoh 2 – Ketika COUNT_BIG() Diperlukan
Berikut adalah contoh di mana Anda perlu menggunakan COUNT_BIG()
.
SELECT COUNT_BIG(*) AS 'Row Count' FROM ReallyBigTable;
Hasil:
+-----------------+ | Row Count | |-----------------| | 9147483648 | +-----------------+
Dalam hal ini, jumlah baris sangat besar sehingga int tidak akan bisa mengatasinya. Untungnya kita bisa menggunakan COUNT_BIG()
, karena mengembalikan hasilnya sebagai besar .
Memeriksa Tipe Data Kedua Fungsi
Ketika kita melihat contoh sebelumnya, kita tidak dapat benar-benar melihat nama tipe data. Kami hanya dapat berasumsi bahwa COUNT()
mengembalikan hasilnya sebagai int dan COUNT_BIG()
menggunakan besar karena itulah yang dikatakan dokumentasi Microsoft (walaupun kami tahu bahwa contoh kedua tidak boleh berupa int karena nilainya terlalu besar untuk sebuah int ).
Kita dapat menggunakan sp_describe_first_result_set
prosedur tersimpan untuk memeriksa tipe data pengembalian masing-masing fungsi ini.
Periksa Tipe Data untuk COUNT()
EXEC sp_describe_first_result_set N'SELECT COUNT(*) FROM Fact.[Order]', null, 0;
Hasil (menggunakan keluaran vertikal):
is_hidden | 0 column_ordinal | 1 name | NULL is_nullable | 1 system_type_id | 56 system_type_name | int max_length | 4 precision | 10 scale | 0 collation_name | NULL user_type_id | NULL user_type_database | NULL user_type_schema | NULL user_type_name | NULL assembly_qualified_type_name | NULL xml_collection_id | NULL xml_collection_database | NULL xml_collection_schema | NULL xml_collection_name | NULL is_xml_document | 0 is_case_sensitive | 0 is_fixed_length_clr_type | 0 source_server | NULL source_database | NULL source_schema | NULL source_table | NULL source_column | NULL is_identity_column | 0 is_part_of_unique_key | NULL is_updateable | 0 is_computed_column | 0 is_sparse_column_set | 0 ordinal_in_order_by_list | NULL order_by_is_descending | NULL order_by_list_length | NULL tds_type_id | 38 tds_length | 4 tds_collation_id | NULL tds_collation_sort_id | NULL
Ya, ada banyak info yang tidak kami butuhkan, tetapi jika Anda melihat system_type_name kolom, Anda akan melihat bahwa nilainya adalah int . Ini memberi tahu kami bahwa kueri kami mengembalikan hasilnya sebagai int , seperti yang diharapkan. Anda juga dapat melihat bahwa max_length dan presisi nilai konsisten dengan int tipe data.
Periksa Jenis Data untuk COUNT_BIG()
Untuk contoh ini, yang perlu kita lakukan hanyalah mengganti COUNT(*)
dengan COUNT_BIG(*)
:
EXEC sp_describe_first_result_set N'SELECT COUNT_BIG(*) FROM Fact.[Order]', null, 0;
Hasil (menggunakan keluaran vertikal):
is_hidden | 0 column_ordinal | 1 name | NULL is_nullable | 1 system_type_id | 127 system_type_name | bigint max_length | 8 precision | 19 scale | 0 collation_name | NULL user_type_id | NULL user_type_database | NULL user_type_schema | NULL user_type_name | NULL assembly_qualified_type_name | NULL xml_collection_id | NULL xml_collection_database | NULL xml_collection_schema | NULL xml_collection_name | NULL is_xml_document | 0 is_case_sensitive | 0 is_fixed_length_clr_type | 0 source_server | NULL source_database | NULL source_schema | NULL source_table | NULL source_column | NULL is_identity_column | 0 is_part_of_unique_key | NULL is_updateable | 0 is_computed_column | 0 is_sparse_column_set | 0 ordinal_in_order_by_list | NULL order_by_is_descending | NULL order_by_list_length | NULL tds_type_id | 38 tds_length | 8 tds_collation_id | NULL tds_collation_sort_id | NULL
Kali ini kita dapat melihat bahwa
system_type_name
adalah
besar
. Ini memberitahu kita bahwa COUNT_BIG()
kueri mengembalikan hasilnya sebagai besar , seperti yang diharapkan.
max_length
dan
presisi
nilai juga konsisten dengan besar tipe data.
Omong-omong, cara yang lebih cepat untuk melakukan hal di atas adalah dengan menggabungkan kedua fungsi ke dalam kueri saat memanggil prosedur tersimpan.
Seperti ini:
EXEC sp_describe_first_result_set N'SELECT COUNT(*), COUNT_BIG(*) FROM Fact.[Order]', null, 0;
Itu akan menampilkan dua baris, satu untuk setiap fungsi di SELECT
pernyataan.