61
4.1 Modélisation de la base de données
SELECT 'FN', 'Front National' UNION ALL
SELECT 'LO', 'Lutte Ouvrière' UNION ALL
SELECT 'LCR', 'Ligue Communiste Révolutionnaire'
GO
CREATE INDEX nix$dbo_PartiPolitique$type
ON dbo.PartiPolitique ([type])
GO
-- à droite
UPDATE dbo.PartiPolitique
SET type = type | POWER(2, 0)
WHERE code in ('MODEM', 'UDF', 'PSLE', 'UMP', 'RPF',
'DLR', 'FN', 'CPNT')
-- à gauche
UPDATE dbo.PartiPolitique
SET type = type | POWER(2, 1)
WHERE code in ('MODEM', 'UDF', 'PS', 'PCF', 'PRG', 'VERTS', 'LO', 'LCR')
-- antilibéral
UPDATE dbo.PartiPolitique
SET type = type | POWER(2, 2)
WHERE code in ('PCF', 'LO', 'LCR')
-- au gouvernement
UPDATE dbo.PartiPolitique
SET type = type | POWER(2, 3)
WHERE code in ('UMP', 'PSLE')
-- qui est au centre ?
-- scan
SELECT code
FROM dbo.PartiPolitique
WHERE type & (1 | 2) = (1 | 2)
-- seek... mais incorrect
SELECT code
FROM dbo.PartiPolitique
WHERE type = 3
Les deux dernières requêtes utilisent deux stratégies de recherche différentes.
Elles produisent un plan d’exécution très différent également, car la première
requête ne peut pas utiliser d’index pour l’aider. Reportez-vous à la section 6.2 traitant du choix des index, pour plus de détails.
Vous pouvez aussi créer une table de référence indiquant quelle est la valeur de
chaque bit, et gérer dans votre code des variables de type INT pour exprimer lisiblement quelles sont les valeurs de chaque bit. Mais dans cet ouvrage dédié aux performances, nous devons préciser que ces méthodes sont souvent une facilité de code qui
diminue la performance des requêtes.
Précédent

- 73/334

Suivant