Je suis responsable de la création d'une base de données sur un projet. Nous avons des champs qui vont rarement avoir une valeur (1 sur 10 000 enregistrements) et j'essaie de trouver la meilleure façon de stocker cela dans la base de données.
Pour autant que je puisse voir, j'ai 3 options:
- Ajoutez une colonne dans le tableau pour chaque valeur supplémentaire
- Ajoutez une table liée qui fait référence à la table d'origine et n'a des enregistrements que là où nous devons stocker une valeur
- Utilisez le type de données XML dans la table d'origine et stockez toutes les valeurs dans celui-ci.
Y a-t-il d'autres options que je n'ai pas envisagées?
J'essaie de déterminer les avantages et les inconvénients de chaque méthode. Pour autant que je sache, 1 serait le plus facile et 2 prendrait le moins d'espace, mais j'ai du mal à trouver de nombreuses ressources pour 3.
sql-server-2008
xml
Matthew Steeples
la source
la source
Réponses:
Cela ressemble à ce dont vous avez besoin: des colonnes éparses et des index filtrés et choisissez l'option 1. Ce sont des fonctionnalités entièrement prises en charge et documentées pour exactement ce scénario.
Je ne peux pas imaginer une solution XML performante dans ce scénario, elle aura un énorme surcoût de métadonnées redondantes et sera lente à interroger.
la source
Une colonne nullable ne prend pas d' espace si elle est de longueur variable dans SQL Server. Le fait d'être NULL est stocké dans le bitmap NULL . Vous pouvez l'indexer si nécessaire avec des index filtrés afin d'ignorer les colonnes NULL.
Ajoute de la complexité lorsque vous considérez le point 1.
Non. Difficile à rechercher, à analyser, etc.: vous le regretterez plus tard
Cela dépend aussi de la taille: est-ce que ce sera char (1000) pour quelques milliards de lignes? Ou minuscule pour 100 000 lignes? Si ces derniers considèrent la complexité supplémentaire du point 2: cela n'en vaut pas la peine.
la source
Avec SQL Server 2008, vous avez la possibilité supplémentaire d'utiliser des colonnes éparses, qui sont conçues spécifiquement pour la situation que vous avez mentionnée.
Ils ont l'avantage supplémentaire que vous pouvez les visualiser en tant qu'objet XML combiné à l'aide de XML COLUMN_SET ou les référencer individuellement et ils offrent une économie d'espace considérable.
Consultez l'article de blog suivant pour plus de détails: http://www.sqlskills.com/BLOGS/PAUL/post/SQL-Server-2008-Sparse-columns-and-XML-COLUMN_SET.aspx
la source
Une quatrième option: ne pas utiliser de tableaux. Les tableaux sont très mal adaptés à ce type de données (en fait, à tout type de données qui n'ont pas été ajustées de force sous forme de tableau). Utilisez simplement XML.
la source