J'ai besoin de stocker un tableau de bits pour chaque enregistrement d'une table, prenant en charge les opérations suivantes:
Tester si un bit est défini et définir un bit (à l'aide de SQL)
Interrogation et définition de la valeur à l'aide d'ADO 2.8 (pas d'ADO.NET)
Indexation (afin de bénéficier de la fonctionnalité "Covering Index")
Le nombre maximal de bits à stocker dans ce tableau est fixe, mais peut dépasser 32 . Autrement dit, une simple colonne int ne fonctionne pas toujours.
D'après ce que j'ai vu jusqu'à présent, mes options sont les suivantes:
- Utiliser plusieurs colonnes int
- Utiliser bigint (fonctionne tant que le nombre de bits est <= 64)
- Utiliser binaire
- ?
La première option fonctionnerait, mais nécessiterait un peu de refactorisation dans le code qui accède aux données. La deuxième option est un soulagement temporaire uniquement, et d'après mes recherches jusqu'à présent, je ne suis pas trop sûr si ADO fonctionne si bien avec bigint . Je n'ai aucune expérience avec binaire et je ne connais aucune autre option.
Quel type de données choisiriez-vous, compte tenu des exigences?
Si tout ce que vous devez stocker est un nombre modéré de valeurs vraies / fausses, vous pouvez utiliser le
bit
type de données.En interne, SQL Server stocke les
bit
colonnes regroupées en «morceaux» d'octets. Ainsi, pour un maximum de 8bit
colonnes dans votre table, SQL le stocke sous la forme d'un octet compressé; 9 à 16bit
colonnes sur 2 octets, etc.Il ne semble pas que vous allez approcher de la limite de colonne, donc cela semble assez simple. Et bien sûr, en les gardant bien séparées comme cela vous permet de nommer les colonnes pour la lisibilité et d'obtenir toutes les possibilités d'indexation que vous auriez normalement (si les indicateurs sont très sélectifs, les index filtrés peuvent être utiles si vous pouvez cibler 2008+).
Faire le paquetage vous-même rendra beaucoup plus compliqué l'indexation (probablement des
bit
colonnes calculées et indexées pour représenter chaque position du masque ... mais alors vous êtes pire que d'utiliserbit
directement).la source