'daki çok büyük tabloların UPDATE veya MERGE değerlerinin çok büyük (300M kayıtları) ve geniş bir TABLE1
günlük güncelleştirmesi gerçekleştirmeliyim. Güncelleştirmelerin kaynak verileri, TABLE1
satırlarının% 10 -% 25'i olan ancak UTABLE
numaralı başka bir tabloda bulunur, ancak dardır. Her iki tablonun da birincil anahtar olarak record_id
vardır.SQL Server
Halen, aşağıdaki yaklaşım kullanarak TABLE1
yeniden ediyorum:
<!-- language: sql -->
1) SELECT (required columns) INTO TMP_TABLE1
FROM TABLE1 T join UTABLE U on T.record_id=U.record_id
2) DROP TABLE TABLE1
3) sp_rename 'TMP_TABLE1', 'TABLE1'
Ancak bu benim sunucuya (SQL Server için RAM 60GB) üzerine yaklaşık 40 dakika sürer. % 50 performans artışı elde etmek istiyorum - başka hangi seçenekleri deneyebilirim?
MERGE
veUPDATE
- kod aşağıda daha hızlı sadece çok küçükUTABLE
tablo için çalışır gibi bir şey - tam boyutta, her şey sadece asılı:<!-- language: SQL --> MERGE TABLE1 as target USING UTABLE as source ON target.record_id = source.record_id WHEN MATCHED THEN UPDATE SET Target.columns=source.columns
ben toplu gerçekleştirebilir duydum ROWCOUNT kullanarak MERGE - ama 300M satır tablosu için yeterince hızlı olabileceğini düşünmüyorum.
Yardımcı olabilecek herhangi bir SQL sorgusu var mı?
sırasında ek çalışmanın ek çalışmasına neden olacağından, lütfen
TABLE1
dizinlemesinden kaçının. Sorgu planını gönderebilir misiniz? –Merhaba @chris, sorgu planı son derece basit: ** 1 ** Tablo Tarama TABLO1, ** 2 ** Tablo Tarama Sırası, ** 3 ** HASH JOIN, ** 4 ** MERGE. İlk ve Son adım, zamanın% 90'ını alıyor. Ancak, daha önce sorumu nasıl ele alacağımı anladım - lütfen kendi cevabımı görün. –