Exercice
Soit la table suivante contenant des listes de références produits :
CREATE TABLE Tref (
ref1 char(100) Primary Key,
ref2 char(100) Unique Not Null,
ref3 char(100) Unique Not Null,
ref4 char(100) Unique Not Null,
ref5 char(100) Unique Not Null,
ref6 char(100) Unique Not Null,
ref7 char(100) Unique Not Null);
CREATE TABLE Tref ( ref1 char(100) Primary Key, ref2 char(100) Unique Not Null, ref3 char(100) Unique Not Null, ref4 char(100) Unique Not Null, ref5 char(100) Unique Not Null, ref6 char(100) Unique Not Null, ref7 char(100) Unique Not Null);
On cherche à optimiser la requête suivante ("_" et "%" sont des jokers qui signifient respectivement "1 caractère quelconque" et "0 à N caractères quelconques") :
SELECT ref1
FROM Tref
WHERE (ref2 like 'REF42%' or ref2 like 'REF__7%' or ref2 like 'REF_78%');
SELECT ref1 FROM Tref WHERE (ref2 like 'REF42%' or ref2 like 'REF__7%' or ref2 like 'REF_78%');
Quelles sont les opérations de partitionnement qui permettront d'optimiser cette requête de façon maximale (indépendamment des conséquences pour d'éventuelles autres requêtes) ?
Votre choixChoix attenduRéponse
Le partitionnement horizontal permettra d'isoler les enregistrements dont "ref2" correspond aux critères de restriction.
Le partitionnement vertical permettra d'isoler les attributs ref1 et ref2, seuls concernés par la requête. On évitera ainsi de travailler avec les autres attributs, par ailleurs relativement volumineux (chaînes de 100 caractères).
On disposera alors de 4 tables :
TrefPartition12OK
contiendra les enregistrements correspondant aux critères de restriction de la requête avec les attributs ref1 et ref2.
TrefPartition134567OK
contiendra les enregistrements correspondant aux critères de restriction de la requête avec tous les attributs sauf ref2 (ref1 étant la clé primaire et la clé étrangère vers TrefPartition12OK).
TrefPartition12nonOK
contiendra les enregistrements ne correspondant pas aux critères de restriction de la requête avec les attributs ref1 et ref2.
TrefPartition134567nonOK
contiendra les enregistrements ne correspondant pas aux critères de restriction de la requête avec tous les attributs sauf ref2 (ref1 étant la clé primaire et la clé étrangère vers TrefPartition12nonOK).
La requête résultante sera alors : "SELECT ref1 FROM TrefPartition12OK".