2009-09-11 5 views
3

Dans l'une de mes précédentes sociétés, nous avions une table séparée dans laquelle nous stockions de longues descriptions dans une colonne de type texte. Je pense que cela a été fait en raison des limitations qui accompagnent le type de texte. Je suis en train de concevoir les tables pour l'application existante sur laquelle je travaille et cette question me vient à l'esprit. Je résonne à stocker la longue description de mes articles sur la même table d'article sur une colonne de varchar (max). Je comprends que je ne peux pas indexer cette colonne mais c'est OK car je ne ferai pas de recherches sur ces colonnes.Ai-je besoin d'une table séparée pour les descriptions nvarchar (max)

Jusqu'à présent, je ne vois aucune raison de séparer cette colonne à une autre table.

Pouvez-vous s'il vous plaît me donner une entrée si je manque sur quelque chose ou si le stockage de mes descriptions sur la même table sur varchar (max) est une bonne approche? Merci!

Répondre

5

Conservez les champs dans la table à laquelle ils appartiennent. Depuis SQL Server 2005, le moteur est devenu beaucoup plus intelligent en ce qui concerne les grands types de données et même les types de données courts de longueur variable. Les anciens types TEXT, NTEXT et IMAGE sont obsolètes. Les nouveaux types avec la longueur MAX sont leur remplacement. Avec SQL 2005, chaque partition dispose de 3 types d'unités d'allocation sous-jacentes: une pour les lignes, une pour les objets LOB et une pour le dépassement de ligne. Les types MAX sont stockés dans l'unité d'allocation LOB, de sorte que le moteur gère pour vous une table distincte pour stocker les objets volumineux. L'unité de dépassement de ligne est destinée aux données de longueur variable dans la rangée qui, après une mise à jour, ne cadrent plus avec la page, de sorte qu'elle est «survolée» dans une unité distincte.

Voir Table and Index Organization.

+0

Informations géniales, merci. +1 –

1

Cela dépend de la fréquence à laquelle vous les utilisez, mais oui, vous pouvez le vouloir sur une table séparée. Avant de prendre la décision, vous devez lire la pagination de fichiers SQL, les divisions de page et les détails de la façon dont sql stocke les données. La réponse courte est que varcharmax() peut certainement entraîner une diminution des performances lorsque ces longueurs de champ changent beaucoup en raison d'une augmentation des découpages de pages, ce qui est une opération coûteuse.

+0

est-ce que garder des colonnes varchar (max) sur la même table diminue la performance des tables même si je fais des requêtes sur la table pour récupérer des données qui n'incluent pas les colonnes de description? Je suis également curieux de savoir si ces baisses de performances sont assez importantes pour séparer les colonnes à d'autres tables. Je ne veux pas faire un travail inutile pour quelque chose de négligeable .. – kaivalya

+0

Peut-être. Cela dépend de la fréquence à laquelle les champs sont mis à jour. Si elles sont INSERT une seule fois, et rarement mises à jour, alors ce n'est pas un problème. Que l'augmentation des performances soit ou non significative est vraiment quelque chose que vous ne pouvez savoir en modélisant votre scénario spécifique. Remplissez une table avec un nombre attendu de lignes. Lancez une machine en faisant des insertions et des mises à jour à peu près au rythme auquel vous vous attendez, puis, avec une autre, commencez à déclencher un grand nombre de tâches sélectionnées. Mesurez la performance Créez une nouvelle base de données avec la disposition différente et testez à nouveau. –