Baru-baru ini, saya sedang mengerjakan proyek peningkatan kinerja database. Satu prosedur tersimpan di sana menyebabkan masalah. Dalam kodenya, kueri mengisi Hitungan baris dan menyimpan nilainya dalam variabel lokal. Permintaan itu memindai tabel besar. Karena itu, pemanfaatan sumber daya menjadi jauh lebih tinggi. Untuk memperbaiki masalah ini, kami menghapus kode yang salah dan menggunakan tampilan katalog SQL Server untuk menghasilkan Hitungan baris tabel.
Ada berbagai cara untuk menghitung jumlah baris dalam tabel SQL Server. Artikel ini akan menjelaskannya agar Anda selalu memilih cara yang tepat untuk melakukannya.
Kita bisa mendapatkan Hitungan baris tabel dengan salah satu metode berikut:
- Gunakan fungsi COUNT().
- Menggabungkan tampilan katalog SQL Server.
- Menggunakan sp_spaceused prosedur tersimpan.
- Menggunakan SQL Server Management studio.
Mari kita gali lebih dalam.
Dapatkan jumlah baris menggunakan COUNT(*) atau Count(1)
Kita dapat menggunakan fungsi COUNT(*) atau COUNT(1) – hasil yang dihasilkan oleh kedua fungsi ini identik.
Untuk mendapatkan jumlah baris, mari kita jalankan kueri terlebih dahulu menggunakan COUNT(*). Untuk tujuan demonstrasi, saya telah menetapkan nilai STATISTICS IO sebagai ON.
USE wideworldimporters
go
SELECT Count(*)
FROM tblcustomer
go
Keluaran:
Statistik IO:
Table 'tblCustomer'. Scan count 1, logical reads 691, physical reads 315, page server reads 0, read-ahead reads 276, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.
Seperti yang Anda lihat, SQL Server harus melakukan 691 pembacaan logis untuk memenuhi hasilnya.
Sekarang, mari kita jalankan kueri menggunakan COUNT(1):
USE wideworldimporters
go
SELECT Count(1)
FROM tblcustomer
go
Keluaran:
Statistik IO:
Table 'tblCustomer'. Scan count 1, logical reads 691, physical reads 687, page server reads 0, read-ahead reads 687, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.
Sekali lagi, SQL Server harus melakukan 691 pembacaan logis untuk memenuhi hasilnya.
Kita harus menyebutkan bahwa ada pendapat bahwa Count (1) lebih cepat daripada fungsi Count (*). Namun, seperti yang Anda lihat pada contoh di atas, kumpulan hasil dan statistik IO adalah sama. Oleh karena itu, Anda dapat menggunakan metode apa pun untuk menghasilkan jumlah baris tabel.
Pro:
Fungsi COUNT mengisi jumlah baris yang akurat dari tabel.
Kekurangan:
Saat Anda menjalankan fungsi COUNT, itu menempatkan kunci di atas meja. Kueri lain yang mengakses tabel harus menunggu hingga hasilnya dihasilkan. Jika Anda bekerja pada sistem yang sibuk dengan tabel yang memiliki jutaan baris, sebaiknya hindari menjalankan fungsi COUNT selama jam kerja, kecuali jika Anda harus mengisi jumlah baris tabel yang tepat.
Menggabungkan tampilan katalog SQL Server
Kita dapat menggunakan tampilan katalog SQL Server dengan tampilan manajemen dinamis berikut:
- sys.tables – mengisi daftar tabel.
- sys.indexes – mengisi daftar indeks tabel.
- sys.partitions – mengisi baris setiap partisi.
Untuk mendapatkan jumlah baris, jalankan skrip berikut:
SELECT a.NAME,
c.NAME,
Sum(b.rows)
FROM sys.tables a
INNER JOIN sys.partitions b
ON a.object_id = b.object_id
INNER JOIN sys.indexes c
ON b.index_id = c.index_id
AND b.object_id = c.object_id
WHERE a.object_id = Object_id('tblCustomer')
AND c.index_id < 2
Keluaran:
Kueri mengisi nama tabel , nama indeks, dan total baris di semua partisi.
Sekarang, mari kita tinjau Statistik IO:
Table 'syssingleobjrefs'. Scan count 3, logical reads 6, physical reads 0, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.
Table 'sysidxstats'. Scan count 1, logical reads 6, physical reads 0, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.
Table 'sysschobjs'. Scan count 0, logical reads 4, physical reads 0, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.
Table 'sysrowsets'. Scan count 2, logical reads 14, physical reads 0, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.
Seperti yang Anda lihat, kueri hanya melakukan 30 pembacaan logis.
Pro:
Pendekatan ini lebih cepat daripada fungsi COUNT. Itu tidak memperoleh kunci pada tabel pengguna, sehingga Anda dapat menggunakannya dalam sistem yang sibuk.
Kekurangan:
Metode ini mengisi perkiraan Hitungan baris. Dalam dokumentasi Microsoft sys.partitions, Anda dapat melihat bahwa baris kolom membawa perkiraan jumlah baris untuk partisi.
Jadi, jika Anda mencari kueri yang memberikan hasil lebih cepat daripada fungsi COUNT, Anda dapat menggunakan yang ini. Namun, hasilnya mungkin tidak akurat.
Gunakan sp_spaceused
sp_spaceused prosedur bersama dengan jumlah baris memberikan detail berikut:
- Nama – Nama Tabel
- Baris – Hitungan baris dalam sebuah tabel.
- Dipesan – total ruang yang dipesan untuk sebuah meja.
- Data – total ruang yang digunakan oleh tabel.
- Ukuran_indeks – total ruang yang digunakan oleh indeks.
- Tidak terpakai – total ruang yang dipesan untuk tabel yang tidak digunakan.
Sintaksnya adalah:
EXEC Sp_spaceused 'database_name.schema_name.table_name'
Pertanyaannya:
EXEC Sp_spaceused 'WideWorldImportors.dbo.tblCustomer'
Keluaran:
Gunakan SQL Server Management Studio
Untuk mendapatkan jumlah baris tabel, kita dapat menggunakan SQL Server management studio.
Buka Studio Manajemen SQL Server> Hubungkan ke instance database> Perluas Tabel> Klik kanan pada tblCustomer> Properties
Di Tabel Properti jendela, klik Penyimpanan . Anda akan melihat Jumlah baris nilai di sebelah kanan:
Opsi lain untuk mendapatkan jumlah baris dalam tabel hadir dengan SQL Complete SSMS Add-in. Dengan peningkatan ini, Anda dapat melihat perkiraan jumlah baris dalam petunjuk saat Anda mengarahkan mouse ke nama tabel di jendela Object Explorer. Dengan cara ini, Anda bisa mendapatkan data yang diperlukan dalam mode visual tanpa upaya tambahan.
Kesimpulan
Artikel ini menjelaskan berbagai pendekatan untuk menghitung jumlah total baris tabel, khususnya:
- Menggunakan fungsi COUNT.
- Menggabungkan tampilan katalog yang berbeda.
- Menggunakan sp_spaceused prosedur tersimpan.
- Menggunakan SQL Server Management studio.
Tidak perlu terpaku pada satu metode saja. Setiap varian memiliki kekhususannya, dan Anda dapat menerapkan salah satu yang paling sesuai dengan situasi Anda.