SQL Server 2012 a introduit la nouvelle fonctionnalité `` même comme dans Oracle et Postgres, mais où les séquences sont préférées aux identités ? Et pourquoi avons-nous besoin de séquences ?
Réponses
Trop de publicités?Je pense que vous trouverez votre réponse ici
À l'aide de l'attribut d'identité pour une colonne, vous pouvez facilement générer incrémentation automatique des numéros (qui, comme souvent utilisés comme clé primaire). Avec Séquence, il sera un autre objet que vous pouvez joindre à un colonne de la table lors de l'insertion. À la différence de l'identité, le numéro suivant pour l' la colonne valeur d'être récupérées à partir de la mémoire plutôt que de partir du disque – cela rend la Séquence nettement plus rapide que l'Identité. Nous allons voir dans quelques exemples.
Et ici:
Séquences: les Séquences ont été demandées par la communauté SQL Server pendant des années, et il est inclus dans cette version. La séquence est un utilisateur objet défini qui génère une séquence d'un nombre. Voici un exemple d'utilisation de la Séquence.
et ici aussi:
Un Serveur SQL à l'objet séquence génère une séquence de nombres comme une colonne d'identité dans les tables sql. Mais l'avantage de la séquence nombre est le numéro de séquence de l'objet n'est pas limité avec sql unique table.
et sur msdn vous pouvez également lire plus au sujet de son utilisation et pourquoi nous en avons besoin (ici):
Une séquence est définie par l'utilisateur objet lié à un schéma qui génère une séquence de valeurs numériques selon le cahier des charges avec qui la séquence a été créé. La séquence de valeurs numériques est généré dans un ordre croissant ou décroissant à un intervalle défini et peut cycle (répéter) comme demandé. Séquences, contrairement aux colonnes d'identité, sont pas associées à des tables. Une application fait référence à un objet séquence pour recevoir sa valeur suivante. La relation entre les séquences et les les tables est contrôlée par l'application. Les applications de l'utilisateur peut référence à un objet de séquence et de coordonner les valeurs clés de l'échelle plusieurs lignes et des tables.
Une séquence est créée indépendamment des tables à l'aide de l' La SÉQUENCE d'instruction. Les Options vous permettent de contrôler l'incrémentation, les valeurs minimum et maximum, point de départ, redémarrage automatique la capacité, et de la mise en cache pour améliorer les performances. Pour plus d'informations sur les options, voir la création de la SÉQUENCE.
À la différence de valeurs de colonne d'identité, qui sont générés lorsque les lignes sont inséré, une application peut obtenir le prochain numéro de séquence de avant la l'insertion de la ligne, en appelant la VALEUR SUIVANTE POUR la fonction. La séquence numéro est alloué lors de la PROCHAINE VALEUR, même si le nombre n'est jamais inséré dans une table. La VALEUR SUIVANTE POUR la fonction peut être utilisée comme valeur par défaut pour une colonne dans une table de définition. Utilisation sp_sequence_get_range pour obtenir une plage de plusieurs numéros de séquence à une fois que.
Une séquence peut être défini comme un type de données entier. Si le type de données n'est pas spécifié, une séquence par défaut est de type bigint.
La séquence et de l'identité à la fois utilisé pour générer automatiquement le nombre, mais la différence majeure est l'Identité est un tableau de personne à charge et de la Séquence est indépendant de la table.
Si vous avez un scénario où vous avez besoin pour maintenir une auto nombre à l'échelle mondiale (en plusieurs tables), aussi vous devez redémarrer l'intervalle après le nombre particulier et vous avez besoin de mettre en cache également pour la performance, ici est l'endroit où nous avons besoin de la séquence et non pas l'identité.
Étant donné ci-dessous sont les articles définissant le monde réel exemple de la séquence, sa mise en œuvre et aussi la différence entre la séquence et de l'identité.
http://raresql.com/2012/04/29/how-sequence-works-in-sql-server-2012/ http://raresql.com/2012/05/01/difference-between-identity-and-sequence/
Bien que les séquences de donner plus de souplesse que les colonnes d'identité, je n'ai pas trouvé qu'ils avaient des avantages de performances.
J'ai trouvé la performance à l'aide de l'identité est toujours 3x plus rapide que l'utilisation de la séquence pour un lot de plaquettes.
J'ai inséré environ 1,5 M de lignes et de performance a été:
- 14 secondes d'identité
- 45 secondes pour la séquence
J'ai inséré les lignes dans une table qui a utilisé la séquence de l'objet via un tableau par défaut:
NEXT VALUE for <seq> for <col_name>
et j'ai aussi essayé la spécification de valeur de la séquence dans l'instruction select:
SELECT NEXT VALUE for <seq>, <other columns> from <table>
Les deux ont le même facteur plus lent que l'identité de la méthode. Mon installation de SQL Server a été 61GB, 12 core, DL380 G7. J'ai utilisé le cache par défaut de l'option pour la séquence.
L'article référencé dans Arion le premier lien montre les performances de la ligne-par-ligne d'insertion et de différence entre l'identité et la séquence a été de 16,6 secondes à 14,3 secondes pour 10 000 plaquettes.