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

Versi dan Performa Baris

Ada beberapa implikasi kinerja, versi baris hanyalah nama baru untuk tipe data stempel waktu lama. Jadi database Anda perlu menyimpan bidang biner tambahan. Performa Anda akan jauh lebih buruk saat Anda mencoba melakukan kueri pada data ini seperti:

SELECT *
FROM MyTable
WHERE rowVersion > @rowVersion

Yang merupakan cara umum yang dapat digunakan untuk mendapatkan daftar item yang diperbarui sejak @rowVersion terakhir. Ini terlihat bagus dan akan berfungsi sempurna untuk tabel dengan katakanlah 10.000 baris. Tetapi ketika Anda mencapai 1 juta baris, Anda akan segera menemukan bahwa ia selalu melakukan pemindaian tabel dan pencapaian kinerja Anda adalah karena tabel Anda sekarang tidak lagi muat sepenuhnya di dalam RAM server.

Ini adalah masalah umum yang dihadapi dengan rowVersion kolom, itu tidak secara ajaib diindeks sendiri. Juga, ketika Anda mengindeks kolom rowVersion Anda harus menerima bahwa indeks akan sering menjadi sangat terfragmentasi dari waktu ke waktu, karena nilai baru yang diperbarui akan selalu berada di bagian bawah indeks, meninggalkan celah di seluruh indeks saat Anda memperbarui item yang ada .

Sunting:Jika Anda tidak akan menggunakan rowVersion bidang untuk memeriksa item yang diperbarui dan sebagai gantinya Anda akan menggunakannya untuk konsistensi untuk memastikan bahwa catatan tidak diperbarui sejak Anda terakhir membaca, maka ini akan menjadi penggunaan yang dapat diterima dan tidak akan berdampak.

UPDATE MyTable SET MyField = ' @myField
WHERE Key = @key AND rowVersion = @rowVersion



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Melewati array ke Prosedur Tersimpan SQL Server

  2. Memetakan kunci komposit menggunakan kode EF terlebih dahulu

  3. Cara Mengganti Semua Kemunculan String dengan String lain di SQL Server – REPLACE ()

  4. Bagaimana cara menggunakan DataContext.ExecuteCommand dan mendapatkan nilai pengembalian proc tersimpan yang dieksekusi?

  5. Periksa apakah bidangnya numerik, lalu jalankan perbandingan hanya pada bidang itu dalam satu pernyataan?