2013-05-23 41 views
7

Bir masaüstünde ~ 6k güncelleme sorgularını sql (Hayır Hazırda Bekleme/JDBC) aracılığıyla yürütmem gerekiyor. SorguMysql Toplu Güncelleştirme

güncelleme gibi bir şeydir id = 'deger2'

Tüm bu sorguları yürütmek için çok uzun sürüyor = 'değer1'i' bir_kimlik kümesi. Performansı iyileştirmenin bir yolu var mı?

cevap

26

Geçici bir tablo oluşturun (yalnızca değer1 ve değer2 değerlerini içerir) ve toplu olarak doldurun (yani, bunu tek bir ekleme deyimiyle yapabilirsiniz). Daha sonra var olan tablonuz ile geçici tablo arasındaki birleştirme kullanarak bir güncelleme yapın. Daha hızlı bu doğrudan güncelleme ile karşılaştırıldığında başarmayı nasıl

INSERT INTO SomeTempTable(id, some_id) 
VALUES (1,2), (3,4), (5,6), ....... 


UPDATE A INNER JOIN SomeTempTable ON A.id = SomeTempTable.id SET A.some_id = SomeTempTable.some_id; 
+0

gibi

şey? – fanchyna

+0

Veritabanına göndererek çok daha az ifade ihtiyacı nedeniyle biraz daha hızlı. Güncelleme bir CSV dosyasına dayanıyorsa, potansiyel olarak ek LOAD DATA INFILE .... sözdizimi kullanılarak yapılabilir. Güncelleştirme benzersiz bir anahtara dayanıyorsa, potansiyel olarak INSERT deyiminde ON DUPLICATE KEY UPDATE ... sözdizimini kullanarak her şey yapılabilir. – Kickstart

İlgili konular