(MYSQL) Existe-t-il des différences de performances significatives, ou d'autres raisons de ne pas utiliser le INSERT ... ON DUPLICATE UPDATE
sql pour mettre à jour par PK/insérer de nouveaux éléments?Puis-je toujours utiliser INSERT .... ON DUPLICATE UPDATE pour les mises à jour/insertions simples?
Puis-je toujours utiliser INSERT .... ON DUPLICATE UPDATE pour les mises à jour/insertions simples?
Répondre
Non, il n'y en a pas.
INSERT ON DUPLICATE KEY UPDATE
va localiser l'enregistrement et le mettre à jour comme le ferait un simple UPDATE
.
En fait, il s'agit juste d'un UPDATE
, suivi d'un INSERT
en cas d'échec du UPDATE
.
INSERT ON DUPLICATE KEY UPDATE
peut être une alternative plus rapide à une mise à jour groupée (lorsque vous avez une table source avec plusieurs enregistrements par clé et que vous voulez incrémenter la table cible une fois par enregistrement).
S'il y a quelques valeurs par clé, cette requête:
INSERT
INTO t_target
SELECT target, cnt
FROM t_sparse d
ON DUPLICATE KEY UPDATE
t_target.cnt = t_target.cnt + d.cnt
sera plus efficace que celui-ci:
INSERT
INTO t_target
SELECT target, cnt
FROM (
SELECT target, SUM(cnt) AS cnt
FROM t_sparse di
GROUP BY
target
) d
ON DUPLICATE KEY UPDATE
t_target.cnt = t_target.cnt + d.cnt
Voir cet article dans mon blog pour plus de détails:
Je voudrais donner une réponse plus nuancée. Cela dépend de l'implémentation du SGBD. Néanmoins, par expérience, je peux vous dire que la plupart des SGBD ont un très bon support pour INSERT ... ON DUPLICATE UPDATE
.
En fait, il est souvent possible d'améliorer les performances en utilisant INSERT ... ON DUPLICATE UPDATE
puisque le système DMBS peut regrouper ces commandes, ce qui réduit le travail à effectuer. C'est le cas avec mysql et vous pouvez souvent voir une augmentation de 10 à 20% de la vitesse par rapport à une simple insertion + mise à jour sans aucun type de batching. Dans l'ensemble, je recommanderais le INSERT ... ON DUPLICATE UPDATE
car il est plus simple à utiliser, votre code est plus facile à maintenir et conduit souvent à un gain de vitesse supplémentaire.
- 1. Comment utiliser SQL - INSERT ... ON DUPLICATE KEY UPDATE?
- 2. MySQL INSERT/UPDATE sans la clé ON DUPLICATE
- 3. INSERT INTO .. Duplicate KEY UPDATE pour plusieurs articles
- 4. Comment utiliser ON DUPLICATE KEY UPDATE dans mon modèle CodeIgniter?
- 5. PDO: recherche d'un enregistrement mis à jour ou inséré avec mysql INSERT ON DUPLICATE KEY UPDATE
- 6. INSERT..ON DUPLICATE KEY UPDATE - mais pas en utilisant la clé en double pour comparer
- 7. MySql "INSERT ... ON DUPLICATE KEY UPDATE" insère toujours des enregistrements en double. Qu'est-ce que je rate?
- 8. Pourquoi 2 lignes sont-elles affectées dans mon `INSERT ... ON DUPLICATE KEY UPDATE`?
- 9. Mysql Erreur d'entrée en double sur ON DUPLICATE KEY UPDATE
- 10. sélectionner ON KEY question DUPLICATE
- 11. MySQL ON DUPLICATE KEY - dernier identifiant d'insertion?
- 12. Sous-sélection MySQL dans ON DUPLICATE KEY
- 13. get mysql_insert_id() lors de l'utilisation de ON DUPLICATE KEY UPDATE avec PHP
- 14. Pouvez-vous utiliser une instruction préparée dans MySQL avec "On Duplicate Key Update"?
- 15. Mysql clé primaire lorsque vous utilisez INSERT INTO ... Duplicate KEY UPDATE
- 16. INSERT rapide SQL sans UPDATE
- 17. SQL INSERT ou UPDATE
- 18. possible de simuler la fonctionnalité mySQL ON DUPLICATE KEY UPDATE avec SQL Server
- 19. SQL Server offre-t-il quelque chose comme MySQL? ON DUPLICATE KEY UPDATE
- 20. Comprendre les mises à jour ActiveRecord simples dans les rails
- 21. MySQL - Créer un index UNIQUE sur deux colonnes pour ON DUPLICATE KEY
- 22. Peut-on utiliser OAuth pour planifier des mises à jour de statut Twitter dans le futur?
- 23. SQLite, SQL: Utiliser UPDATE ou INSERT en conséquence
- 24. NHibernate insert génère des mises à jour pour les éléments de collection
- 25. SQL Server: INSERT, UPDATE, DELETE, CREATE Délais
- 26. SQL Server 2000 équivalent pour ON DUPLICATE KEY?
- 27. Comportement des déclencheurs "AFTER INSERT, UPDATE" dans SQL Server
- 28. TSQL: UPDATE avec INSERT INTO SELECT FROM
- 29. INSERT nouvelles lignes, UPDATE anciennes lignes: comment?
- 30. Mysql trigger pour faire un INSERT au lieu d'un UPDATE
Quels sont les autres SGBD (sauf MySQL) qui supportent cette clause? – Quassnoi