Facendo un gran numero di upserts il più velocemente possibile
-
11-10-2019 - |
Domanda
La mia app (che utilizza MySQL) sta facendo un gran numero di upserts successive. In questo momento il mio aspetto SQL come questo:
INSERT IGNORE INTO customer (name,customer_number,social_security_number,phone) VALUES ('VICTOR H KINDELL','123','123','123')
INSERT IGNORE INTO customer (name,customer_number,social_security_number,phone) VALUES ('VICTOR H KINDELL','123','123','123')
INSERT IGNORE INTO customer (name,customer_number,social_security_number,phone) VALUES ('VICTOR H KINDELL OR','123','123','123')
INSERT IGNORE INTO customer (name,customer_number,social_security_number,phone) VALUES ('TRACY L WALTER PERSONAL REP FOR','123','123','123')
INSERT IGNORE INTO customer (name,customer_number,social_security_number,phone) VALUES ('TRACY L WALTER PERSONAL REP FOR','123','123','123')
Finora ho trovato INSERT IGNORE
per essere il modo più veloce per raggiungere upserts. Selezione di un record per vedere se esiste e poi o l'aggiornamento o l'inserimento di uno nuovo è troppo lento. Anche questo non è così veloce come vorrei, perché ho bisogno di fare una dichiarazione separata per ogni record. A volte avrò circa 50.000 di queste affermazioni di fila.
C'è un modo per prendersi cura di tutti questi in una sola istruzione, senza eliminare tutti i record esistenti?
Soluzione
Si può mettere tutto in 1 inserto
INSERT IGNORE INTO table_1 (field1, field2) VALUES ('val1', 'val2'), ('val3', 'val4'), etc
. Si consiglia inoltre di controllare INSERT ... ON DUPLICATE KEY UPDATE
se è necessario o di aggiornamento o di inserire un record.