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:
- 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êmcondition
điều đó thu hẹp một phần để được hợp nhất. - Đả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