SQL: Est-il efficace d'utiliser tinyint au lieu de Integer si ma valeur maximale est 255?

Supposons que je veux save le nombre de lignes de données qui peuvent être max. 24 parce que chaque rangée est 1 heure.

Pour save l'index de ligne dans la database, un champ tinyint serait totalement suffisant. Mais dans mon esprit, je me souviens que les bases de données sont optimisées pour les entiers ?!

Alors vaut-il mieux utiliser tinyint?

Avec une table plus étroite, la database contiendra plus d'loggings dans une seule page E / S et nécessitera donc less de lectures de disque dur.

La règle générale consiste à toujours utiliser le type de données qui nécessite la taille de stockage la plus faible.

En général, less il y a d'espace, plus le nombre de lignes sur une page d'E / S 8k signet (ou en memory) est important, less les E / S sont nécessaires pour searchr et / ou récupérer des données … Ceci est particulièrement important pour les colonnes utilisées dans les indices. Toutefois, si votre machine est, par exemple, une machine 32 bits et exécute un operating system 32 bits, le plus petit segment de memory pouvant être adressé de façon indépendante est 32 bits, donc si c'est la seule colonne de votre schéma de table de 32 bits, cela n'a pas d'importance car chaque ligne complète de données doit commencer et se terminer sur une limite de 32 bits, de sorte que chaque ligne doit être un multiple de 32 bits.

Par exemple, si votre table était

MyTable (ColA tinyint, Int ColB, ColC DateTime) Ensuite, chaque ligne prendra 16 octets (128 bits) et 24 bits seront gaspillés.

D'un autre côté, si vous avez 4 colonnes qui pourraient être tinyInts, alors utilisez SQL Server pour en placer quatre dans un location de stockage 32 bits sur le disque (quel que soit l'ordre dans lequel vous les avez déclarées).

Les mêmes principes s'appliquent à SQL Server 64 bits fonctionnant sur 64 bits OS / CPUbB

tinyint

less d'espace est bon.

Tinyint est un entier, et il serait plus rapide que INT parce que TINYINT prend less d'octets (1 octet) que le type de données INT (4 octets).

Référence:

  • int, bigint, smallint et tinyint (Transact-SQL)