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

UPDATE hoặc MERGE của các bảng rất lớn trong SQL Server

Trên thực tế, tôi đã tìm ra các khuyến nghị chung cho các truy vấn như vậy:Ý tưởng sử dụng SQL Merge hoặc Update là một cách rất thông minh nhưng nó không thành công khi chúng tôi cần cập nhật nhiều bản ghi (tức là 75M ) trong một bảng lớn và rộng (tức là 240M ).

Nhìn vào sơ đồ truy vấn của truy vấn bên dưới, chúng ta có thể nói rằng TABLE SCAN của TABLE1 và MERGE cuối cùng đang chiếm 90% thời gian.

MERGE TABLE1 as Target  
USING UTABLE as source  
ON Target.record_id = source.record_id   
WHEN MATCHED AND (condition) THEN   
    UPDATE SET Target.columns=source.columns

Vì vậy, để sử dụng MERGE, chúng ta cần:

  1. Giảm số hàng chúng tôi cần cập nhật và chuyển chính xác thông tin này đến SQL Server. Điều này có thể được thực hiện bằng cách tạo UTABLE nhỏ hơn hoặc chỉ định thêm condition điều đó thu hẹp một phần để được hợp nhất.
  2. Đảm bảo rằng phần được hợp nhất phù hợp trong bộ nhớ, nếu không truy vấn chạy chậm hơn. Tạo TABLE1 giảm hai lần thời gian truy vấn thực của tôi từ 11 giờ xuống 40 phút.

Như Mark đã đề cập, bạn có thể sử dụng UPDATE cú pháp và sử dụng WHERE mệnh đề thu hẹp một phần để được hợp nhất - điều này sẽ cho kết quả tương tự. Ngoài ra, hãy tránh lập chỉ mục TABLE1 vì điều này sẽ gây ra thêm công việc xây dựng lại chỉ mục trong MERGE



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Msg 203, Mức 16, Trạng thái 2, không phải là số nhận dạng hợp lệ

  2. Sql Server - kết nối với xác thực windows

  3. Khắc phục “Lỗi tràn số học chuyển đổi int thành kiểu dữ liệu số” trong SQL Server

  4. Phát triển máy ảo Azure để sử dụng máy chủ SQL

  5. Chuyển đổi số tháng thành hàm tên tháng trong SQL