Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

UPDATE atau MERGE tabel yang sangat besar di SQL Server

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:

  1. 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 menentukan condition tambahan yang mempersempit bagian yang akan digabungkan.
  2. 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TAN() Contoh di SQL Server

  2. Pivot dan koma nilai yang dipisahkan

  3. Batasan ekspresi reguler SQL Server

  4. sql pivot dengan kolom dinamis

  5. Kinerja bcp/BULK INSERT vs. Parameter Bernilai Tabel