Données de dépassement de ligne de plus de 8 Ko
Une table peut contenir au maximum 8 060 octets par ligne. Dans SQL Server 2005, cette restriction est allégée pour les tables qui contiennent des colonnes de type varchar, nvarchar, varbinary, sql_variant ou CLR défini par l'utilisateur. La longueur de chacune de ces colonnes ne doit cependant pas dépasser la limite de 8 000 octets ; néanmoins, la combinaison de leurs largeurs peut dépasser la limite de 8 060 octets. Cela concerne la création et la modification des colonnes de type varchar, nvarchar, varbinary, sql_variant ou CLR défini par l'utilisateur, ainsi que la mise à jour et l'insertion des données.
Remarque : |
---|
Cette restriction ne concerne pas les colonnes varchar(max), nvarchar(max), varbinary(max), text, image ou xml. Pour plus d'informations sur le stockage de ces colonnes, consultez Utilisation de types de données de valeur élevée, Utilisation des données de type text et image et Utilisation de données XML. |
Observations relatives au dépassement de ligne
Lorsque vous combinez des colonnes de type varchar, nvarchar, varbinary, sql_variant ou CLR défini par l'utilisateur qui dépassent 8 060 octets par ligne, tenez compte des points suivants :
- Le dépassement de la limite de 8 060 octets par ligne peut affecter les performances car le Moteur de base de données SQL Server 2005 gère toujours une limite de 8 Ko par page. Lorsqu'une combinaison de colonnes de type varchar, nvarchar, varbinary, sql_variant ou CLR défini par l'utilisateur dépasse cette limite, le Moteur de base de données déplace la colonne d'enregistrements la plus large vers une autre page dans l'unité d'allocation ROW_OVERFLOW_DATA, tout en maintenant un pointeur de 24 octets sur la page initiale. Les enregistrements volumineux sont automatiquement déplacés vers une autre page dès lors que les enregistrements s'allongent suite à une opération de mise à jour. Les opérations de mise à jour qui raccourcissent les enregistrements peuvent provoquer le rapatriement d'enregistrements vers la page initiale dans l'unité d'allocation IN_ROW_DATA. En outre, l'interrogation et autres opérations de sélection, telles que les tris ou les jointures portant sur des enregistrements volumineux qui contiennent des données de dépassement de ligne, ralentissent le temps de traitement car ces enregistrements sont traités de façon synchrone et non de manière asynchrone.
Par conséquent, lorsque vous concevez une table comportant plusieurs colonnes de type varchar, nvarchar, varbinary, sql_variant ou CLR défini par l'utilisateur, évaluez le pourcentage de lignes susceptibles de dépasser et la fréquence à laquelle ces données de dépassement sont susceptibles d'être interrogées. S'il est probable qu'il y ait de fréquentes requêtes sur de nombreuses lignes de données de dépassement de ligne, pensez à normaliser la table de manière à ce que certaines colonnes soient déplacées vers une autre table. Celle-ci peut ensuite être interrogée lors d'une opération JOIN asynchrone. - La longueur des différentes colonnes ne doit pas dépasser la limite de 8 000 octets par colonne de type varchar, nvarchar, varbinary, sql_variant et CLR défini par l'utilisateur. Seule la combinaison de leurs longueurs peut dépasser la limite de 8 060 octets par ligne d'une table.
- La somme des longueurs des colonnes d'autres types de données, notamment char et nchar, ne doit pas dépasser la limite de 8 060 octets par ligne. En outre, les données d'objet volumineux ne sont pas soumises à la limite de 8 060 octets par ligne.
- La clé d'un index cluster ne peut pas contenir de colonnes varchar qui possèdent des données dans l'unité d'allocation ROW_OVERFLOW_DATA. Si un index cluster est créé sur une colonne varchar et que les données existantes se trouvent dans l'unité d'allocation IN_ROW_DATA, les actions d'insertion ou de mise à jour réalisées ultérieurement sur la colonne et susceptibles d'envoyer les données hors ligne sont vouées à l'échec. Pour plus d'informations sur les unités d'allocation, consultez Organisation des tables et des index.
- Vous pouvez inclure des colonnes qui contiennent des données de dépassement de ligne en tant que colonnes clés ou non clés d'un index non-cluster.
Pour obtenir des informations sur les tables ou les index pouvant contenir des données de dépassement de ligne, utilisez l'objet de gestion dynamique sys.dm_db_index_physical_stats.
Voir aussi
Concepts
Affectation d'un type de données à une colonne