Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

RowVersion và Hiệu suất

Có một vài hàm ý về hiệu suất, chuyển đổi hàng chỉ là một tên mới cho kiểu dữ liệu dấu thời gian cũ. Vì vậy, cơ sở dữ liệu của bạn sẽ cần lưu trữ trường nhị phân bổ sung. Hiệu suất của bạn sẽ bị ảnh hưởng nhiều hơn khi bạn cố gắng thực hiện các truy vấn trên dữ liệu này, chẳng hạn như:

SELECT *
FROM MyTable
WHERE rowVersion > @rowVersion

Đây là cách phổ biến có thể được sử dụng để lấy danh sách các mục được cập nhật kể từ @ rowVersion cuối cùng, cách này có vẻ ổn và sẽ hoạt động hoàn hảo cho một bảng có 10.000 hàng. Nhưng khi bạn đạt đến 1 triệu hàng, bạn sẽ nhanh chóng phát hiện ra rằng nó luôn thực hiện quét bảng và hiệu suất của bạn bị ảnh hưởng là do bảng của bạn bây giờ không còn nằm hoàn toàn trong RAM của máy chủ.

Đây là sự cố phổ biến gặp phải với rowVersion , nó không được lập chỉ mục một cách kỳ diệu trên chính nó. Ngoài ra, khi bạn lập chỉ mục cột rowVersion, bạn phải chấp nhận rằng chỉ mục thường sẽ rất phân mảnh theo thời gian, bởi vì các giá trị cập nhật mới sẽ luôn nằm ở cuối chỉ mục, để lại khoảng trống trong suốt chỉ mục khi bạn cập nhật các mục hiện có .

Chỉnh sửa:Nếu bạn không sử dụng rowVersion để kiểm tra các mục đã cập nhật và thay vào đó, bạn sẽ sử dụng nó để nhất quán để đảm bảo rằng bản ghi không được cập nhật kể từ lần cuối bạn đọc, khi đó đây sẽ là cách sử dụng hoàn toàn chấp nhận được và sẽ không ảnh hưởng.

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. Cách viết hoa chữ cái đầu tiên của bản ghi trong SQL

  2. Có ảnh hưởng nghiêm trọng đến hiệu suất khi sử dụng Khóa ngoại trong SQL Server không?

  3. Các loại con trỏ máy chủ SQL - Chỉ chuyển tiếp con trỏ động | Hướng dẫn sử dụng SQL Server / TSQL

  4. Làm cách nào để xuất tất cả dữ liệu từ bảng sang định dạng sql có thể chèn?

  5. Trích xuất số tuần từ một ngày trong SQL Server (T-SQL)