Comment avez-vous décidé d'utiliser nvarchar
ou nchar
?
Par exemple, j'ai remarqué que la database d'appartenance par défaut créée par le fournisseur sqlmembership déclare que la colonne Email doit être de type nvarchar (256)
Pour moi, cela semble être une valeur maximale inutilement grande pour une colonne d'email. Je suppose que dans des circonstances normales, les courriels de plus de 40 ou 50 caractères seraient plutôt rares.
Mais comme datatables telles que les adresses e-mail varient en longueur devraient-ils toujours être stockés en tant que nvarchar afin d'éliminer l'espace redondant?
Si vous utilisez nvarchar pour une colonne e-mail. Dans le cas d'une modification de l'adresse e-mail, si le nouvel e-mail est plus long que l'e-mail précédent, cela entraînera de nombreuses fractionnements de page et, par conséquent, une grande partie du coût de la performance?
Souhaitez-vous envisager d'utiliser nchar (40) pour une adresse e-mail et de compromettre la perte d'espace de stockage en échange de coûts de performance de séparation de page non?
Ou est-ce que l'utilisation de nchar (40) augmenterait significativement la taille de la database, causant ainsi d'autres pertes de performance sur la vitesse de la requête?
Est-ce que «utiliser nchar seulement quand vous connaissez la taille des données pour remplir la colonne» est une règle raisonnable à suivre?
les emails de plus de 40 ou 50 caractères seraient plutôt rares
Il n'en faut qu'un pour ruiner votre model …
Si le nouveau courriel est plus long que le courriel précédent, cela entraînera de nombreuses divisions de page
Non. Mais même si c'était le cas, ce n'est pas comme ça que vous concevez votre model de données. Disons, pour le bien de l'argument, que chaque fois qu'un email est mis à jour, cela provoquerait un split de page. Voulez-vous optimiser pour cela ? Non, car pré-allouer une grande taille fixe (c'est-à-dire en utilisant un NCHAR (256)) est bien pire, il élimine en effet le split de page potentiel à la mise à jour (encore une fois coût de l'augmentation de la taille de la table, ce qui se traduit par la bande passante IO et la consommation de memory, voir l' espace disque est bon marché … CE N'EST PAS LE POINT !!! .
Pourquoi est-ce que je dis que les mises à jour de longueur variable ne causent pas de fractionnement de page? Parce que les divisions de page sont forcées lorsque l'image de ligne ne correspond plus à la page. Une mise à jour d'une colonne de longueur variable provoquera probablement un dépassement de ligne et laissera la ligne à la même taille qu'avant, ou même plus petite. Il y a des cas où la taille de la ligne augmentera après le débordement, mais il y a plusieurs conditions pour que cela triggers effectivement un split de page:
Je n'achète vraiment pas que vous avez une charge de travail aussi étrange et ésotérique que les conditions ci-dessus pour être le facteur principal dans la conduite de votre design. Utilisez un NVARCHAR de longueur pratique pour s'adapter à toute valeur que vous rencontrerez.