Impact de la vitesse d'utilisation de varchar dans SQL Server 2008

9

Autrefois, utiliser varcharover charétait un gros non non, car le varcharétait stocké sur une page différente de celle du reste de la ligne. Est-ce toujours le cas aujourd'hui avec SQL Server 2008? Vais-je voir un gain de mémoire / performances en changeant 1 varchar(5)à 3 colonnes en char(5)colonnes sur une table avec

a) dites 2.000.000 de lignes b) si l'une des varcharcolonnes fait partie des index / des clés primaires

Carlo V. Dango
la source
2
Duplication possible de la question Comment les champs trop longs (varchar / nvarchar) affectent-ils les performances et l'utilisation du disque? (MSSQL Server 2008) . Si vous pensez que ce n'est pas un doublon, vous y trouverez certainement des réponses.
Marian

Réponses:

8

Vous confondez text / varchar (max) (types LOB) avec varchar (n) / char (n)

Sinon, si vous utilisez char (1000) et non varchar (1000) et que la longueur moyenne des données est, disons, 42 c'est une mauvaise conception et beaucoup d'espace gaspillé.

gbn
la source
sous DB2 et certains autres moteurs DB, char et varchar étaient stockés différemment et certains des conseils pour DB2 transférés sur SQL Server.
Andrew Bickerton
@Andrew Bickerton: encore un autre mythe ...
gbn
pouvez-vous m'indiquer où ce mythe a été démystifié? (Je suis d'accord que les conseils ne s'appliquent pas à SQL Server)
Andrew Bickerton
Je fais également référence à l'une des versions originales de DB2 (ce qui n'a probablement pas été le cas au cours des 10 dernières années), similaire à l'avis de SQL 2000 selon lequel les PK doivent être non groupés en raison de problèmes de performances toujours présents - bien que n'est plus vrai
Andrew Bickerton
@Andrew Bickerton: regardez simplement sur les structures de disque de SQL Server (plusieurs réponses SO de moi) stackoverflow.com/search?q=user%3A27535+anatomy . Désolé pour la réponse tardive
gbn
3

Il est difficile de vous parler de gains de performances ou de hits spécifiques sans en savoir plus sur votre schéma, mais en général, vous voulez définir le dataype pour correspondre à vos données. Si vous avez besoin d'une largeur fixe (par exemple, vous savez que vous aurez toujours cinq caractères), vous devez utiliser char (5). Si vous avez une quantité variable de données, vous devez utiliser varchar (5).

Pour SQL, plus vous pouvez insérer de données sur une page, meilleures sont vos performances.

SQLRockstar
la source
3

Pour autant que je sache, SQL Server n'a jamais stocké de types de données varchar ou nvarchar hors ligne. Le texte et NText sont différents. Il y a quelques bits supplémentaires qui sont stockés pour une colonne de largeur variable mais c'est à peu près tout.

mrdenny
la source