0
我的應用程序(使用MySQL)正在執行大量的後續upserts。現在我的SQL是這樣的:儘可能快地做大量的upserts
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')
到目前爲止,我發現INSERT IGNORE
是實現upserts的最快方式。選擇一個記錄來查看它是否存在,然後更新它或插入一個新記錄太慢。即使這不是我想要的那麼快,因爲我需要爲每條記錄做一個單獨的聲明。有時候我會有大約5萬個這樣的陳述。
有沒有辦法在一條語句中處理所有這些事情,而不刪除任何現有記錄?
如果我這樣使用'INSERT IGNORE',如果只有一條記錄存在,是不是會忽略整個查詢?不幸的是,由於需要長時間解釋的原因,我不能使用'ON DUPLICATE KEY UPDATE'。 –
'如果使用IGNORE關鍵字,則執行INSERT語句時發生的錯誤將被視爲警告。例如,如果沒有IGNORE,表中重複表中現有UNIQUE索引或PRIMARY KEY值的行會導致重複鍵錯誤,並且語句會中止。使用IGNORE時,該行仍未插入,但未發出錯誤。' – dkarp
'REPLACE INTO'也是一個選項,但由於它刪除並替換了現有的行,因此可能效率低於INSERT IGNORE。 – dkarp