Étude dans un cas précis EDs NFE 106 CNAM Paris 1 Interrogation des indexes Pour cette séance nous utiliserons une version étendue de la table vue dans la séance précédente. Soit : Départements (NUM, NOM, REGION, PRE- FECTURE, PRESIDENT, SUPERFICIE, NB_CANTONS) Communes (NUM_DEPT, CP, NOM, MAIRE, HABI- TANTS, SUPERFICIE, NB_DEPUTE) Chaque département à un numéro unique. Il y a 100 départements et 26 régions différentes. Nous supposerons que les départements sont équitablement répartis sur les régions A chaque commune correspond son numéro de département et les 3 chiffres du Code Postal. Il y a 36000 communes (nous avons arrondis à l inférieur). Nous supposerons que ces communes sont reparties équitablement sur les départements. Il y a 63 millions d habitants en france, pour plus de simplicité nous les répartirons équitablement. Pour ceux-ci, nous utiliserons des identifiants sur 2 octets, des nombres plus grands sur 4 octets et des chaînes de caractère sur 30 octets. Chaque bloc de données fait 2 ko, dont 90% sont utilisés pour les données. Les pointeurs sont codés sur 18 octets. 2 Stockage des données Sur combien de pages seront stockés les tables départements et communes? Tuples départements : ID + 4 * chaines + 2*NB = 130 o Tuples communes : ID + 4 * NB + 2 * chaine = 78 o Taille utile bloc : 2 * 1024 * 90% = 1843 o Taille départements (14 tuples par block : 1843/130) : 100 / 14 = 8 pages Taille communes (23 tuples par block : 1843/78) : 36000 / 23 = 1 566 pages 3 Étude dans un cas précis 3.1 Création des indexes Nous allons nous intéresser à la table Communes. Comme il est difficile de faire un indexe sur 36000 valeurs, nous allons représenter un sous ensemble et construire nos indexes en tenant compte de celles-ci et en imaginant les 36000 d une manière abstraite. Nous prendrons le département de l Ille-et-Vilaine (ou du moins un sous ensemble de celui-ci), et un BTree d ordre 4. Vertigo/CNAM, Paris 1 1
Étude dans un cas précis 3.2 Interrogation avec les indexes 1. Construisez un index non-dense sur le nom de la commune (faites une partie de celui-ci en imaginant les pages correspondant et les pointeurs vers les feuilles). 2. Est-il possible de faire un autre index non-dense sur le Code Postal? 3. Construisez un index dense sur le numéro de département. 4. Construisez un index dense sur le numéro de département et couvrant 1 sur le champ NOM CP Commune 35250 Andouillé-Neuville 35370 Argentré-du-Plessis 35190 Bécherel 35890 Bourg-des-Comptes 35550 Bruc-sur-Aff 35131 Chartres-de-Bretagne 35800 Dinard 35120 Dol-de-Bretagne 35300 Fougères 35580 Guichen 35580 Guignen 35480 Guipry 35150 Janzé 35850 Langon 35550 Lieuron 35550 Lohéac 35133 Luitré 35480 Messac 35520 La Mézière 35120 Mont-Dol 35500 Montreuil-sous-Pérouse 35380 Paimpont 35550 Pipriac 35137 Pleumeleuc 35600 Redon 35660 Renac 35000 Rennes 35780 La Richardais 35610 Sains 35760 Saint-Grégoire 35550 Saint-Just 35400 Saint-Malo 35330 Saint-Séglin 35320 Le Sel-de-Bretagne 35530 Servon-sur-Vilaine 35550 Sixt-sur-Aff 35370 Torcé 35450 Val-d Izé 35500 Vitré 3.2 Interrogation avec les indexes Nous supposerons que : l index BTree non-dense sur NOM prend 43 pages de données et une hauteur d arbre de 3. 1. Un index couvrant associe une valeur supplémentaire à la valeur indexée dans la feuille du BTree. L avantage est de pouvoir utiliser cette valeur lors de l évaluation Vertigo/CNAM, Paris 2 2
Étude dans un cas précis 3.2 Interrogation avec les indexes l index BTree dense sur NUM_DEPT prend 395 pages sur une hauteur d arbre de 4. l index BTree dense sur NUM_DEPT et couvrant sur NOM prend 980 pages sur une hauteur d arbre de 5. Pour chacune des requêtes suivantes, vous donnerez le nombre d entrées/sorties avec une interrogation sans indexe comparé à l indexe adéquate. Nous supposerons que l indexe n est pas en cache ni en mémoire (il faudra donc charger le nécessaire). 3.2.1 SELECT NOM From Communes Where NOM Like Saint% 10% des villes françaises commencent par saint (nous supposerons qu elles sont réparties équitablement sur les différents départements). 2. Non dense sur communes.nom : 164 I/O (3600 communes saintes contiguës : 157 pages à lire + 5 pages dans les feuilles + 2 pages de l index de l arbre). 3. Dense sur communes.num_dept : impossible 4. Dense et couvrante sur communes.num_dept + NOM : impossible 3.2.2 SELECT HABITANTS From Communes Where NUM_DEPT=35 2. Non dense sur communes.nom : impossible 3. Dense sur communes.num_dept : 368 I/O (360 communes en moyenne : 360 pages de données à atteindre + 360 / (1843/20 = 92 pointeurs) = 4 pages dans les feuilles + 4 pages de l index de l arbre). 4. Dense et couvrante sur communes.num_dept + NOM : 375 I/O (360 communes en moyenne : 360 pages de données à atteindre + 360 / (1843/50 = 36 pointeurs) = 10 pages dans les feuilles + 5 pages de l index de l arbre). 3.2.3 SELECT NOM From Communes Where NUM_DEPT=35 2. Non dense sur communes.nom : impossible 3. Dense sur communes.num_dept : 368 I/O (360 communes en moyenne : 360 pages de données à atteindre + 4 pages dans les feuilles + 4 pages de l index de l arbre). 4. Dense et couvrante sur communes.num_dept + NOM : 15 I/O (360 communes en moyenne : 0 pages de données à atteindre - les noms sont dans les feuilles couvrantes + 10 pages dans les feuilles + 5 pages de l index de l arbre). 3.2.4 SELECT NOM From Communes Where NOM Like Saint% AND NUM_DEPT=35 On supposera que 10% des villes françaises commencent par saint réparties équitablement sur les différents départements. Vertigo/CNAM, Paris 3 3
Dans un cas plus général 2. Non dense sur communes.nom : 164 I/O (3600 communes saintes contiguës avec 23 tuples par bloc : 157 + 7 E/S dans l index) le filtrage se fera ensuite 3. Dense sur communes.num_dept : 368 I/O (360 communes en moyenne : 360 E/S + 8 dans l index). 4. Dense et couvrante sur communes.num_dept + NOM : 15 I/O (Aucun accès disque, tout en mémoire, 10 feuilles et 5 de l arbre) 3.2.5 SELECT HABITANTS From Communes Where NOM Like Saint% AND NUM_DEPT=35 On supposera que 10% des villes françaises commencent par saint réparties équitablement sur les différents départements. 2. Non dense sur communes.nom : 164 I/O (3600 communes saintes contiguës avec 23 tuples par bloc : 157 + 7 E/S dans l index) le filtrage se fera ensuite 3. Dense sur communes.num_dept : 368 I/O (360 communes en moyenne : 360 E/S + 8 dans l index). 4. Dense et couvrante sur communes.num_dept + NOM : 51 I/O (36 I/O de données (3600 * 10% * 10%) + 10 feuilles et 5 de l arbre) 4 Dans un cas plus général 4.1 Autres indexes possibles Pour cette partie, nous proposerons un ensemble d index disponibles (ils ne sont pas créés en même temps). L exercice consiste simplement à comparer les indexes. N Type Valeurs indexées pages hauteur Taille entrée 1 Non dense départements.region 1 2 18+30 = 48o 2 Non dense départements.nom 1 2 18+30 = 48o 3 Dense départements.region 3 2 18+30 = 48o 4 Dense départements.nom 3 3 18+30 = 48o 5 Dense et couvrant départements.region + NOM 5 2 18+60 = 78o 4.2 Interrogations Pour chacune des requêtes suivantes calculez le nombre d Entrées/Sorties avec une interrogation sans index, et avec chacun des indexes possibles sur la table demandée. Dans tous les cas sans index : 8 I/O. Vertigo/CNAM, Paris 4 4
Dans un cas plus général 4.2 Interrogations 4.2.1 SELECT NOM From Départements Where REGION= Rhone-Alpes 1. Non dense sur départements.region : 5 I/O (100/26 4 départements : 2 E/S au pire, +1 index) 2. Non dense sur départements.nom : recherche impossible 3. Dense sur départements.region : 6 I/O ( 4 départements => 4 E/S, +2 de l index - 1 feuille + 1 arbre) 4. Dense sur départements.nom : impossible 5. Dense et couvrant sur départements.region + NOM : 2 I/O (index suffit : 1 feuille + 1 dans l arbre) 4.2.2 SELECT REGION From Départements Where NOM= Meuse 1. Non dense sur départements.region : impossible 2. Non dense sur départements.nom : 1 I/O (1 accès car unique + 1 bloc dans l index) 3. Dense sur départements.region : impossible 4. Dense sur départements.nom : 3 I/O (index 2, 1 accès car unique) 5. Dense et couvrant sur départements.region + NOM : impossible 4.2.3 SELECT NOM From Départements Where REGION= Ile-de-France AND NOM like S% 1. Non dense sur départements.region : 3 I/O (index 1 I/O, lecture 2 pages dans le pire des cas) 2. Non dense sur départements.nom : 3 I/O (index 1, 2 pages dans le pire des cas - 26 lettres dans l alphabet donc 2 pages) 3. Dense sur départements.region : 6 I/O (index 2, 100/26 = 4 départements par région en moyenne) 4. Dense sur départements.nom : 7 I/O (index 3 - dans le pire des cas, 4 accès disques - en moyenne 4 départements commençant par la lettre S ) 5. Dense et couvrant sur départements.region + NOM : 3 I/O (1 feuille + 2 dans l arbre) Vertigo/CNAM, Paris 5 5