2009-09-17 7 views
1

Je dois ajouter une nouvelle colonne à une table existante au travail, et je me demande s'il faut la créer en tant que type de données tinyint ou bit. Notre société a récemment effectué une mise à niveau de SQL Server 2000 vers 2008, et IIRC mon patron a dit qu'il y avait des problèmes dans SQL Server 2000 en essayant d'utiliser des bits. Je pense qu'il a dit qu'ils étaient liés à des index et/ou à des groupes - j'oublie.SQL Server 2008: tinyint vs bit

Quels facteurs devrais-je prendre en compte lorsque je choisis entre tinyint et bit, si les seules valeurs que je prévois de stocker sont true/1 ou false/0? Existe-t-il des règles de SQL Server 2000 que je peux/devrais désapprendre?

Répondre

4

Le problème en 2000 était un peu ne pouvait pas faire partie d'un index. Ce qui est logique puisque un bit n'a que deux états. C'est un champ très pauvre à avoir sur un index. En 2005, vous pouvez créer des index couverts, ce qui vous permet de spécifier des éléments de données supplémentaires à stocker avec l'index. Cela vous permet d'éviter une recherche de signet.

Je voudrais aller avec le bit.

+0

C'est le genre d'info que je cherchais. Connaissez-vous des fonctionnalités supplémentaires dans SQL Server 2008 susceptibles d'éviter les problèmes de performances lors de l'utilisation de bits? –

+0

Non pas du haut de ma tête. – JoshBerke

1

bit est généralement utilisé pour les valeurs booléennes. Si tout ce que vous stockez dans le db sont des valeurs booléennes, alors je pense qu'un tinyint serait trop puissant.

2

Si vous n'avez qu'une colonne à un bit dans une table, il faudra tout de même un octet pour la stocker. Le moteur de base de données SQL Server optimise le stockage des colonnes de bits. S'il existe 8 colonnes de bits ou moins dans une table, les colonnes sont stockées sous la forme 1 octet. S'il existe des colonnes de 9 à 16 bits, les colonnes sont stockées sous la forme de 2 octets, et ainsi de suite.

bit (Transact-SQL)

SQL Server 2005 fait la même