60
Chapitre 4. Optimisation des objets et de la structure de la base de données
kage des colonnes de type BIT est optimisé par le regroupement de plusieurs de ses
colonnes dans un seul octet de stockage. Ainsi, si vous avez de une à huit colonnes
de type BIT, SQL Server utilisera un octet dans sa page de données, de neuf à seize,
deux octets, etc. Vous pouvez donc créer plusieurs de ces colonnes sans inquiétude.
Notez que les chaînes de caractères TRUE et FALSE sont convertibles en BIT, explicitement ou implicitement, ce qui est utile pour reproduire dans son code un comportement proche d’un type booléen. Si vous pouvez travailler directement en 0 ou 1,
faites-le, cela évitera la phase de conversion :
-- ok
SELECT CAST('TRUE' as bit), CAST('FALSE' as bit)
SET LANGUAGE 'french'
-- erreur
SELECT CAST('VRAI' as bit), CAST('FALSE' as bit)
-- ok
DECLARE @bool bit
SET @bool = 'TRUE'
SELECT @bool
Une autre option est de créer une colonne de type entier ou BINARY, et y stocker
des positions 0 ou 1, bit par bit (en créant une colonne utilisée comme bitmap,
champ de bits). Les opérateurs T-SQL de gestion des bits (bitwise operators) permettent de manipuler chaque position. C’est un moyen efficace de gérer un état complexe, car il permet d’exprimer à la fois des positions particulières, et une vue
générale, indexable, de la situation de la ligne. Une recherche sur un état complexe
pourra profiter de cette approche. En revanche, une recherche impliquant seulement une position de bits sera moins efficace. Prenons un exemple :
USE tempdb
GO
CREATE TABLE dbo.PartiPolitique (
code char(5) NOT NULL PRIMARY KEY CLUSTERED,
nom varchar(100) NOT NULL UNIQUE,
type int NOT NULL DEFAULT(0)
)
GO
INSERT INTO dbo.PartiPolitique (code, nom)
SELECT 'PCF', 'Parti Communiste Français' UNION ALL
SELECT 'MRC', 'Mouvement Républicain et Citoyen' UNION ALL
SELECT 'PS', 'Parti Socialiste' UNION ALL
SELECT 'PRG', 'Parti Radical de Gauche' UNION ALL
SELECT 'VERTS', 'Les Verts' UNION ALL
SELECT 'MODEM', 'Mouvement Démocrate' UNION ALL
SELECT 'UDF', 'Union pour la Démocratie Française' UNION ALL
SELECT 'PSLE', 'Nouveau Centre' UNION ALL
SELECT 'UMP', 'Union pour un Mouvement Populaire' UNION ALL
SELECT 'RPF', 'Rassemblement pour la France' UNION ALL
SELECT 'DLR', 'Debout la République' UNION ALL
Précédent

- 72/334

Suivant