IGNORE_DUP_KEY = ON
indique essentiellement à SQL Server d'insérer des lignes non dupliquées, mais ignore silencieusement les doublons; le comportement par défaut consiste à déclencher une erreur et à annuler la transaction entière lorsqu'il y a des doublons dans une colonne qui ne les autorise pas.Pourquoi ne pas définir IGNORE_DUP_KEY sur ON?
J'ai travaillé avec une tonne de données qui normalement a au moins un doublon quand il ne devrait pas être, donc j'aime utiliser les contraintes UNIQUE
quand je sais qu'une valeur ne devrait pas avoir de doublons; Cependant, lorsque j'essaie de charger des données en vrac, la dernière chose que je veux, c'est que 90% d'entre elles soient exécutées et que je rencontre soudainement un doublon et que j'éclate complètement (Oui, je sais que la solution est de s'assurer qu'il n'y a pas de doublons , mais parfois je suis juste remis un tableur rempli de données et dit de le charger dès que possible).
Alors, quelle est la raison pour avoir la valeur par défaut est OFF
, et pourquoi ne serait pas vous voulez qu'il soit tout le temps pour que toutes les entrées non-dup réussir alors que vous n'avez pas à vous soucier tous les doublons; les chances sont que les doublons sont là par erreur de toute façon.
Est-ce lié à la performance ou à autre chose? Cela semble être une excellente idée, mais il doit y avoir une raison pour laquelle ce n'est pas le comportement par défaut.
Principalement, y a-t-il une bonne raison pas d'utiliser ceci que je devrais être au courant, ou devrait-il être pour l'évaluation au cas par cas?
Un commentaire, le réglage de l'ignorer ON n'est pas sans conséquences. Si vous avez une colonne d'identité, vous verrez des sauts dans l'identité pour chaque insertion qui a été ignorée en raison d'un doublon. –
L'activation de cette option sur les index non clusterisés entraîne une pénalité sur les performances [Gestion des index uniques avec IGNORE_DUP_KEY] (https://blogs.msdn.microsoft.com/craigfr/2008/01/30/maintaining-unique-indexes-with -ignore_dup_key /) et peut entraîner un verrouillage sévère de la plage avec des lots d'insertion simultanés [Range lock (RS-U) en raison de l'option d'index IGNORE_DUP_KEY] (http://aboutsqlserver.com/tag/locking/). Ainsi, lorsque vous souhaitez insérer plusieurs lignes en une seule fois et ignorer les doublons, appliquez-le uniquement sur la clé en cluster. – eremmel
@eremmel Vous venez de sauver mon bacon, merci pour ce commentaire! Je me suis cogné la tête contre un mur ces derniers jours pour essayer de comprendre pourquoi je recevais des verrous de Range sans isolement sérialisable quand j'ai eu ce petit chatouillement dans mon cerveau à propos de ignore_dup_key causant des problèmes de perf. La recherche rapide m'a conduit à ce post, vous rock! Je souhaite seulement que c'était une réponse complète donc c'était plus évident :) –