2013-05-23 28 views
7

Muszę wykonać ~ 6k aktualizacji kwerendy na tabeli przez sql (bez Hibernate/JDBC). Zapytanie jest coś takiego jakMysql Bulk Update

aktualizacji Zestaw some_id = „” gdzie Value1 id = „wartość2”

trwa zbyt długo, aby wykonać wszystkie te pytania. Czy istnieje sposób na polepszenie wydajności?

Odpowiedz

26

Utwórz tabelę tymczasową (zawierającą tylko wartość1 i wartość2) i zapełnij ją zbiorczo (co oznacza, że ​​można to zrobić za pomocą pojedynczej instrukcji wstawiania). Następnie wykonaj aktualizację, łącząc istniejącą tabelę z tabelą tymczasową.

Coś

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

jak to może osiągnąć szybciej w porównaniu z bezpośrednią aktualizację? – fanchyna

+0

Trochę szybszy ze względu na konieczność wysyłania do bazy danych znacznie mniej instrukcji. Jeśli aktualizacja jest oparta na pliku CSV, potencjalnie można wstawić wstawkę przy użyciu składni LOAD DATA INFILE .... Jeśli aktualizacja jest oparta na unikalnym kluczu, potencjalnie wszystko można wykonać w instrukcji INSERT przy użyciu składni ON DUPLICATE KEY UPDATE ... – Kickstart