Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Hitungan SQL Server lambat

Perkiraan yang sangat mendekati (mengabaikan setiap transaksi dalam penerbangan) adalah:

SELECT SUM(p.rows) FROM sys.partitions AS p
  INNER JOIN sys.tables AS t
  ON p.[object_id] = t.[object_id]
  INNER JOIN sys.schemas AS s
  ON s.[schema_id] = t.[schema_id]
  WHERE t.name = N'myTable'
  AND s.name = N'dbo'
  AND p.index_id IN (0,1);

Ini akan kembali jauh, jauh lebih cepat daripada COUNT(*) , dan jika tabel Anda berubah cukup cepat, itu tidak benar-benar kurang akurat - jika tabel Anda telah berubah antara saat Anda memulai COUNT Anda (dan kunci diambil) dan ketika dikembalikan (ketika kunci dilepaskan dan semua transaksi tulis menunggu sekarang diizinkan untuk menulis ke meja), apakah itu jauh lebih berharga? Saya rasa tidak.

Jika Anda memiliki beberapa subset dari tabel yang ingin Anda hitung (misalnya, WHERE some_column IS NULL ), Anda bisa membuat indeks yang difilter pada kolom itu, dan menyusun klausa where dengan satu atau lain cara, tergantung pada apakah itu pengecualian atau aturan (jadi buat indeks yang difilter pada set yang lebih kecil). Jadi salah satu dari dua indeks ini:

CREATE INDEX IAmTheException ON dbo.table(some_column)
  WHERE some_column IS NULL;

CREATE INDEX IAmTheRule ON dbo.table(some_column)
  WHERE some_column IS NOT NULL;

Kemudian Anda bisa mendapatkan hitungan dengan cara yang sama menggunakan:

SELECT SUM(p.rows) FROM sys.partitions AS p
  INNER JOIN sys.tables AS t
  ON p.[object_id] = t.[object_id]
  INNER JOIN sys.schemas AS s
  ON s.[schema_id] = t.[schema_id]
  INNER JOIN sys.indexes AS i
  ON p.index_id = i.index_id
  WHERE t.name = N'myTable'
  AND s.name = N'dbo'
  AND i.name = N'IAmTheException' -- or N'IAmTheRule'
  AND p.index_id IN (0,1);

Dan jika Anda ingin mengetahui kebalikannya, Anda tinggal mengurangkan dari kueri pertama di atas.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memasukkan pyodbc.Binary data (BLOB) ke dalam kolom gambar SQL Server

  2. Untuk menjalankan paket SSIS di luar Alat Data SQL Server, Anda harus menginstal Pindahkan File ke Arsip Layanan Integrasi atau lebih tinggi

  3. SQL Server menambahkan kunci utama kenaikan otomatis ke tabel yang ada

  4. Bagaimana saya bisa mendapatkan daftar nama elemen dari nilai XML di SQL Server

  5. tidak dapat memperbarui gambar profil menggunakan varbinary