Mysql
MySQL:查詢重複行或重複插入(更新)是否更有效?
只是對資源效率感到好奇。如果我有一個需要重複完成的插入列表,其中可能包含重複項(沒有辦法解決這個問題,我必須使用的 API 很糟糕),對我來說查詢主節點是否更好,並且只有在它不存在(即2個查詢),或者只是插入並更新重複語法?
謝謝!
以 250/小時的速度,所有可能的技術都非常快。無論如何,我會把我的 2 美分投入…
100 行的多
INSERT
行將執行 100 個人的 10 倍INSERTs
。多行
INSERT
可能會導致AUTO_INCREMENTs
. 一般來說,該命令會預先分配它可能需要的所有 id,然後“燒掉”那些 id 沒有使用的。(REPLACE
燒很多,因為它是DELETE
+INSERT
。)為了有效的“標準化”,請執行以下操作:
INSERT IGNORE INTO HostNorm (host_name) SELECT DISTINCT s.host_name FROM Staging AS s LEFT JOIN HostNorm AS n ON n.host_name = s.host_name WHERE n.host_id IS NULL;
- 可能的新值列表位於
Staging
.HostNorm
是需要放置“新”行的位置。- 只有“新”行被饋送到
INSERT
(見LEFT JOIN
)。IGNORE
是為了適應有多個執行緒(連接)執行可能發生碰撞的類似插入。(罕見的碰撞會導致燒毀id
。)- 這可以處理多少行沒有上限。
- 這最適用於 100 行。
- 這是為非常高速的輸入而設計的;對於您相對較慢的攝取速度,它應該可以正常工作。
更多討論在我的部落格中。