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

ORDER OLEH dan DENGAN (ROWLOCK, UPDLOCK, READPAST)

Seperti yang diharapkan

  • SELECT dengan ORDER BY, tanpa ROWLOCK, tanpa indeks akan memiliki kunci tabel karena pemindaian/pengurutan menengah untuk menyelesaikan TOP 2. Jadi sesi ke-2 melewatkan seluruh tabel karena READPAST

  • SELECT tanpa ORDER BY hanya memilih 2 baris, yang kebetulan dalam urutan penyisipan (kebetulan murni, tidak ada urutan tersirat). Fakta bahwa 2 baris ini terkunci menyebabkan sesi ke-2 melompat ke baris tidak terkunci berikutnya.

SQL Server mencoba untuk menjaga kunci sedetail mungkin tetapi pemindaian berarti kunci tabel. Sekarang, ini biasanya tidak akan membuat perbedaan (ini akan menjadi kunci baca bersama) tetapi Anda juga memiliki UPDLOCK yang berarti tabel yang dikunci secara eksklusif

Jadi, Anda membutuhkan keduanya

  • 3 petunjuk dalam kueri SELECT (ROWLOCK, UPDLOCK, READPAST) untuk mengontrol perincian, isolasi, dan konkurensi.
    Menggunakan ROWLOCK saja masih akan menyebabkan kunci eksklusif pada setiap baris untuk memindai/mengurutkan.
  • indeks pada Value TERMASUK TestID untuk membuat SELECT efisien. Indeks saja mungkin akan memperbaiki konkurensi tetapi tidak dijamin.

Dalam salah satu pertanyaan Anda sebelumnya, saya menautkan ke jawaban saya (dalam komentar) ke Kondisi Balap Antrian Proses SQL Server di mana saya memiliki semua 3 petunjuk kunci




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menghubungkan ke SQL Server dari Nodejs

  2. Baca JSON apa pun ke dalam daftar pasangan nilai kunci (format EAV) di SQL Server

  3. Menjalankan set kueri SQL menggunakan file batch?

  4. Menggunakan SQL Server Profiler | Pemecahan Masalah Kinerja SQL Server -5

  5. SSIS C# 2012 Script Task yang merujuk WinSCPnet.dll gagal saat dijalankan dari SQL Server Agent with Exception telah dilemparkan oleh target permintaan