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

Tham gia chậm trên các bảng kích hoạt Đã chèn / Đã xóa

Chèn vào các bảng tạm thời được lập chỉ mục trên các cột tham gia cũng có thể cải thiện mọi thứ như inserteddeleted không được lập chỉ mục.

Bạn có thể kiểm tra @@ROWCOUNT bên trong trình kích hoạt, vì vậy bạn chỉ thực hiện logic này trên một số ngưỡng số hàng mặc dù trên SQL Server 2008, điều này có thể hơi phóng đại con số nếu trình kích hoạt được kích hoạt do kết quả của MERGE câu lệnh (Nó sẽ trả về tổng số hàng bị ảnh hưởng bởi tất cả MERGE các hành động không chỉ có liên quan đến trình kích hoạt cụ thể đó).

Trong trường hợp đó, bạn chỉ có thể thực hiện một số việc như SELECT @NumRows = COUNT(*) FROM (SELECT TOP 10 * FROM INSERTED) T để xem liệu ngưỡng có được đáp ứng hay không.

Bổ sung

Một khả năng khác mà bạn có thể thử nghiệm đơn giản là bỏ qua trình kích hoạt cho các bản cập nhật lớn này. Bạn có thể sử dụng SET CONTEXT_INFO để đặt cờ và kiểm tra giá trị của giá trị này bên trong trình kích hoạt. Sau đó, bạn có thể sử dụng OUTPUT inserted.*, deleted.* để nhận các giá trị "trước" và "sau" cho một hàng mà không cần JOIN ở tất cả.

DECLARE @TriggerFlag varbinary(128)
SET @TriggerFlag = CAST('Disabled' AS varbinary(128)) 

SET CONTEXT_INFO @TriggerFlag

UPDATE YourTable
SET Bar = 'X'
OUTPUT inserted.*, deleted.* INTO @T

/*Reset the flag*/
SET CONTEXT_INFO 0x



  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 đơn giản để chuyển đổi các cột và hàng trong SQL?

  2. Kiểm tra xem người dùng đã đăng nhập vào trang web asp.net chưa

  3. SQL Server (2008) Chuyển ArrayList hoặc String tới SP cho IN ()

  4. Bộ xử lý truy vấn không thể tạo kế hoạch truy vấn do các gợi ý được xác định trong truy vấn này. Gửi lại truy vấn và không sử dụng SET FORCEPLAN

  5. Tham gia 100 bảng