Sebenarnya saya telah menemukan rekomendasi umum untuk pertanyaan seperti itu:Ide untuk menggunakan SQL Merge atau Update adalah ide yang sangat cerdas tetapi gagal ketika kita perlu memperbarui banyak catatan (yaitu 75 juta ) dalam tabel besar dan lebar (yaitu 240 juta ).
Melihat rencana kueri kueri di bawah ini, kita dapat mengatakan bahwa TABLE SCAN
dari TABEL1 dan MERGE
terakhir menghabiskan 90% waktu.
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
Jadi untuk menggunakan MERGE kita perlu:
- Kurangi jumlah baris yang perlu kami perbarui dan berikan informasi ini dengan benar ke SQL Server. Ini dapat dilakukan dengan membuat
UTABLE
lebih kecil atau menentukancondition
tambahan yang mempersempit bagian yang akan digabungkan. - Pastikan bahwa bagian yang akan digabung cocok dengan memori jika tidak, kueri berjalan jauh lebih lambat. Membuat
TABLE1
dua kali lebih sedikit mengurangi waktu kueri saya yang sebenarnya dari 11 jam menjadi 40 menit.
Seperti yang disebutkan Mark, Anda dapat menggunakan UPDATE
sintaks dan gunakan WHERE
klausa untuk mempersempit bagian yang akan digabungkan - ini akan memberikan hasil yang sama. Juga harap hindari pengindeksan TABLE1
karena ini akan menyebabkan pekerjaan tambahan untuk membangun kembali indeks selama MERGE