Info Bases de données avancées

Slides:



Advertisements
Présentations similaires
1 Les bases de données Séance 7 Les fonctions avancées : Opérateurs ensemblistes, Sous-requêtes et transactions.
Advertisements

Les systèmes d’équationsLes systèmes d’équations Deux contraintes d’égalité qu’on impose simultanément à deux variables forment ce qu’on appelle « un.
Evaluation de requêtes Quelques résultats préliminaires 1 Amin Mesmoudi.
Université de Nantes CHORD Vincent Trève. Introduction ● Problématique – Comment accéder efficacement aux données réparties sur un système pair à pair?
SQL query - 1 / D. Berrabah SQL : interrogation de BD Requêtes d'interrogation simples Requêtes complexes Agrégats et groupement.
Guide de l'enseignant SolidWorks, leçon 1 Nom de l'établissement Nom de l'enseignant Date.
TP 1 BIS Programmation structurée à l’aide de fonctions (FC) et de bloc fonctionnels (FB)
Comment utiliser le débogueur de Visual Studio /8/2015 INF145 1 Créé par Julien Galarneau Allaire, révisé par Eric Thé S.E.G.
Volée 1316 S3 Cours No 2_3 : Le nombre en 1-2H. Les fonctions du nombre  Dénombrer, énumérer, décrire une collection. Aspect cardinal  Dater, classer,
Utiliser le nouveau site internet du lycée niort/
Nouveautés Version 4.1 et mai 2017.
Cross-Plateform Cours JavaScript
AMUE – SIFAC Gestion des services fait sur SIFAC WEB
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Division de la Planification et de la Recherche en Collecte
Langage de manipulation de données (LMD)
Algorithme et programmation
Algèbre relationnelle
CCNP Routage Chapitre 4 - Questionnaire N°1
Les Bases de données Définition Architecture d’un SGBD
Lois fondamentales de l'algèbre de Boole
Algorithmique demander jeu du pendu.
Initiation aux bases de données et à la programmation événementielle
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
L’Instruction de Test Alternatif
Javadoc et débogueur Semaine 03 Version A16.
Principes de programmation (suite)
VI. Tri par tas (Heap sort)
Documentation technique (Linux)
Notion De Gestion De Bases De Données
Création Et Modification De La Structure De La Base De Données
Manipulation D’Une Base De Données
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
PROGRAMMATION ET ENSEIGNEMENT
DATA WEARHOUSE 1ère année LA: Technologies systèmes d’information
Programmation Android Bases De Données, SQL-lite
Langage d’interrogation des Données LID
9 Méthodes multidimentionnelles et représentation d'associations
Formation sur les bases de données relationnelles.
Langage d’interrogation des Données Les fonctions de groupes
Base de données relationnelle et requêtes SQL
6. CONCEPTION PHYSIQUE RELATIONNELLE
Diagramme d’activité.
L1 Technique informatique
Adaptive Neuro Fuzzy Inference System (ANFIS)
SIO SI3 : Exploitation des données
NUMERATION et REPRESENTATION DES NOMBRES
Module 13 : Implémentation de la protection contre les sinistres
Lois de Probabilité Discrètes
5 Introduction au modèle relationnel 5.1 Concepts de base
Semaine 3 Retour sur la semaine 2 Plan de séance
03- Evaluation Access 2003 Cette évaluation comporte des QCM (1 seule réponse) et des Zones à déterminer dans des copies d’écran.
Le code de Huffman: est une méthode de compression statistique de données qui permet de réduire la longueur du codage d'un alphabet. Le code de Huffman.
Présentation 9 : Calcul de précision des estimateurs complexes
Tri Externe Chapitre 13: 13.1—13.5
Chapitre V La Procédure Comptable
Algèbre Relationnelle
Optimisation Benjamin Nguyen STI4A INSA CVL
Reconnaissance de formes: lettres/chiffres
9 Méthodes multidimentionnelles et représentation d'associations
9 Méthodes multidimentionnelles et représentation d'associations
Opérateurs et fonctions arithmétiques Opérateurs de relation Opérateurs logiques Cours 02.
Tris Simples/Rapides.
Arbre binaire.
SQL Structured Query Language
Chapter 11: Récursivité Java Software Solutions Second Edition
Evaluation des Operations Relationnelles
Retour d’expérience Solutions organisationnelles
Python Nicolas THIBAULT
Les données structurées et leur traitement
Transcription de la présentation:

Info 409 - Bases de données avancées Université Libanaise Faculté des Sciences – Section I Master 1 Informatique Info 409 - Bases de données avancées Semestre: 2 Année Universitaire: 2017/2018 Crédits: 5 Dr. Antoun Yaacoub

Plan Partie I Partie II Partie III Partie IV Pannes système Gestionnaire de transactions Contrôle concurrentiel Bases de données distribuées Partie II Implémentation des SGBDs: Enregistrements, blocs et adressage Structures d’index: Arbre binaire balancé et table de hachage Partie III Optimisation des requêtes Exécution des requêtes Partie IV Bases de données déductives Bases de données orientées objet

Optimisation et exécution des requêtes select e.nom from enseignant e where e.ville in ( select V from ( select e1.ville as V, count(e1.enseignant_id) as cc from enseignant e1 group by e1.ville) where cc >= any (select count(e2.enseignant_id) from enseignant e2 group by e2.ville) ) ; Optimisation et exécution des requêtes Partie III

Référence Fundamentals of Database Systems 6th Edition Elmasri, Navathe Addison-Wesley

Plan Survoler les techniques utilisées par un SGBD pour traiter, optimiser et exécuter des requêtes de haut niveau.

Etapes typiques lors du traitement d’une requête de haut niveau Lecture: identification des mots-clés SQL, des relations et des attributs Analyse: vérifier les règles de syntaxe Validation: vérifier l’existence des attributs et des relations dans la BD Optimiseur de requête: conception d’une stratégie d'exécution lecture, analyse et validation Forme immédiate de la requête (arbre) optimiseur de requête Plan d’exécution Générateur de code de la requête Code pour exécuter la requête Processeur d’exécution BD Résultat la requête

Introduction Trouver la stratégie optimale nécessite généralement trop de temps, sauf pour la plus simple des requêtes. La recherche d’une stratégie optimale d'exécution de requête nécessite la disponibilité d‘informations détaillées Sur la façon dont les fichiers sont mis en œuvre et Sur le contenu du fichier Des informations qui peuvent ne pas être entièrement disponible dans le catalogue du SGBD.

Optimisation Chaque SGBD possède un certain nombre d'algorithmes générales d'accès de base de données qui implémentent les opérations relationnelles telles que SELECT, JOIN ou des combinaisons de ces opérations. Seules les stratégies d'exécution qui peuvent être implémentées par les algorithmes d'accès SGBD et qui s'appliquent à une requête et un modèle physique particuliers peuvent être considérées par le module d'optimisation des requêtes.

Traduire les requêtes SQL en algèbre relationnel

Rappel Opérateur de sélection 𝝈 Select * from EMPLOYEE where Dno=4 𝝈 Dno=4 (EMPLOYEE) Select * from EMPLOYEE where Salary>30000 𝝈 Salary>30000 (EMPLOYEE) La forme générale 𝝈 <Condition de sélection> (RELATION)

Rappel Opérateur de projection 𝝅 Select Lname, Fname, Salary from EMPLOYEE 𝝅 Lname, Fname, Salary (EMPLOYEE) La forme générale 𝝅 <liste d′attributs> (RELATION)

Rappel Opérateur de jointure ⋈ Select E.*, D.* from EMPLOYEE E , DEPARTMENT D DEPARTMENT ⋈ Mgr_ssn=Ssn EMPLOYEE La forme générale 𝑹⋈ <condition de jointure> 𝑺

Rappel Opérateur de groupe ℑ ℑF Prononcé script F La forme générale <attributs de groupe> 𝕴 <list de fonction> 𝑹 Select COUNT Ssn, AVERAGE Salary from EMPLOYEE group by Dno Dno 𝕴 COUNT Ssn, AVERAGE Salary (EMPLOYEE)

Les étapes d’optimisation La requête SQL est traduite en une expression équivalente en algèbre relationnel Optimiser la requête

Traduction des requêtes SQL en une expression équivalente en algèbre relationnel Les requêtes SQL sont décomposées en des blocs de requêtes: SELECT-FROM-WHERE (GROUP BY- HAVING) Chaque bloc est traduit en algèbre relationnel Exemple: SELECT E.lname, E.fname FROM EMPLOYEE E WHERE E.salary > (SELECT MAX(E1.salary) FROM EMPLOYEE E1 WHERE E1.Dno=5) Bloc 1 Bloc 2 SELECT E.lname, E.fname SELECT MAX(E1.salary) FROM EMPLOYEE E FROM EMPLOYEE E1 WHERE E.salary > C WHERE E1.Dno=5 𝝅 lname,fname(𝝈 salary>c(EMPLOYEE)) 𝕴 MAX salary(𝝈 Dno=5(EMPLOYEE))

Algorithme de tri externe

Exemple Algorithme à 2 phases: tri et fusion B=2 valeurs, M = 3 blocs, N = 8 blocs Phase 1: créer N/(M –1)=4 groupes triés chacun de taille (M – 1) blocs 1 2 4 2 9 1 5 3 8 3 2 8 5 2 Mémoire centrale

Exemple Algorithme à 2 phases: tri et fusion B=2 valeurs, M = 3 blocs, N = 8 blocs Phase 2: fusionner (M –1)=2 groupes triés en un groupe trié 1 1 2 2 4 9 2 3 3 5 8 2 5 8 Mémoire centrale

Exemple Algorithme à 2 phases: tri et fusion B=2 valeurs, M = 3 blocs, N = 8 blocs Phase 2: fusionner (M –1)=2 groupes triés en un groupe trié 1 1 2 2 2 3 3 4 5 8 9 2 5 8 Mémoire centrale

Algorithmes de Tri externe Algorithmes de tri: peuvent être utilisés pour les requêtes ayant une clause ORDER-BY, des opérations JOIN, UNION, INTERSECT, EXCEPT, l’option DISTINCT. Tri externe: Adéquat pour les gros fichiers ou les enregistrements qui ne se calent pas dans la mémoire principale, utiliser une stratégie de tri-fusion: Trier de petits sous-fichiers triés (runs) du fichier principal (en mémoire) (par conséquent) Fusionner les runs triés.

En détail Deux phases: Phase de tri: Phase de la fusion: Les runs du fichier qui peuvent se tenir dans l'espace disponible de la mémoire tampon sont lues dans la mémoire, Les runs sont triés à l'aide d'un algorithme de tri interne, Les runs sont écrits sur ​​le disque comme des sous-fichiers triés temporaires. Phase de la fusion: Les runs triés sont fusionnés pendant une ou plusieurs passes.

Les étapes de tri externe tri-fusion La phase de tri La taille d’un run et le nombre de runs (nR) sont dictés par: le nombre de blocs de données (b) et l’espace tampon disponible (nB). Par exemple, si nB=5 blocs, b = 1024 blocs, alors nR= 𝑏 𝑛𝐵 =205 runs. Après la phase de tri, 205 runs triés sont sauvegardés comme des sous- fichiers temporaires sur le disque.

Les étapes de tri externe tri-fusion La phase de fusion Les runs triés sont fusionnés pendant une ou plusieurs passes La degré de fusion (dM): nombre de runs qui peut être fusionné ensemble en une passe. Dans chaque passe Un bloc tampon est nécessaire pour maintenir un bloc de chacun des runs fusionnés Un bloc est nécessaire pour maintenir un bloc du résultat de fusion dM= min(nB-1, nR) Nombre des passes=logdM(nR)

Reprenons l’exemple Par exemple, si nB=5 blocs, b = 1024 blocs, alors nR= 𝑏 𝑛𝐵 =205 runs. Après la phase de tri, 205 runs triés sont sauvegardés comme des sous- fichiers temporaires sur le disque. dM= min(nB-1, nR) = min(4, 205) = 4 Les 205 runs triés seront fusionnés à chaque étape 4 à la fois (4-way merging). 205 – 52 – 13 – 4 – 1 On a besoin de 4 passes, vérifions Nombre des passes=logdM(nR) = log4(205) = 4

i ← 1; j ← b; {taille du fichier en blocs} k ← nB; {taille du tampon en blocs} m ← ( j/k); {Phase de tri} while (i ≤ m){ Lire les k (ou ce qui reste) blocs suivants du fichier dans le tampon; Trier les enregistrements dans le tampon et écrire comme des sous-fichiers temporaires; i ← i + 1; } {Phase de fusion : fusion des sous-fichiers jusqu'à ce qu'il ne reste que 1} i ← 1; p ← logk-1m {p est le nombre de passes pour la phase de fusion} j ← m; while (i ≤ p) { n ← 1; q ←  j/(k–1)  ; {nombre de sous-fichiers à écrire dans cette passe} while (n ≤ q) do { lire kes k–1 (ou ce qui reste) sous-fichiers suivants 1 bloc à la fois; fusionner et écrire comme un nouveau sous-fichier 1 bloc à la fois; n ← n + 1; } j ← q; i ← i + 1; }

Divers algorithmes pour les opérations usuelles

Plan Implémentation de l’opération de sélection Implémentation de l’opération de jointure Implémentation de l’opération de projection Implémentation de l’opération de produit cartésien Implémentation de l’opération de l’union Implémentation des opérations d’intersection et d’exception Implémentation des opérations de min, max, count, avg et sum Implémentation de l’opération de group by

Implémentation de l’opération de sélection

Implémentation de l’opération de sélection Select = opération de recherche pour localiser les enregistrements dans un fichier de données qui satisfont une certaine condition. Méthodes de recherche pour des sélections simple: Algorithmes de recherche sont appelés file scans, car ils scannent les enregistrements d’un fichier pour retrouver les enregistrements qui satisfont la condition de sélection. Diapos suivants: 6 méthodes de recherche implémentant l’opération de sélection.

Implémentation de l’opération de sélection Méthodes de recherche pour des sélections SIMPLE S1 - Recherche linéaire: Retrouver chaque enregistrement dans le fichier et tester si les valeurs de ses attributs satisfont la condition de sélection. La recherche est effectuée dans les tampons. S2 – Recherche binaire: Si la condition de sélection contient une égalité et le fichier est ordonné. Généralement, la recherche binaire n’est pas utilisée en BD parce que les fichiers ordonnés ne sont utilisés que s’ils disposent d’un index primaire. S3a – Utilisation d’un index primaire: Si la condition de sélection contient une égalité sur un attribut disposant d’un index primaire. Cette condition retrouve un seul enregistrement.

Implémentation de l’opération de sélection Méthodes de recherche pour des sélections SIMPLE S3b – Utilisation d’une clé de hachage: Si la condition de sélection contient une égalité sur un attribut ayant une clé de hachage. Cette condition retrouve un seul enregistrement. S4 – Utilisation d’un index primaire pour retrouver plusieurs enregistrements: Si la condition de sélection contient une comparaison is >, >=, <, ou <= sur un attribut ayant un index primaire. S5 – Utilisation d’un index de groupe (cluster) pour retrouver plusieurs enregistrements: Si la condition de sélection contient une égalité sur un attribut non clé ayant un index de groupe. S6 – Utilisation d’un index secondaire (B+-tree): Cette méthode retrouve 1 enregistrement si le champ d’indexation est une clé. Utilisée aussi si la condition de sélection contient une comparaison is >, >=, <, ou <=.

Implémentation de l’opération de sélection Méthodes de recherche pour des sélections CONJONCTIVES COMPLEXES Si la condition de sélection est complexe, de la forme: 𝝈Dno=5 AND Salary > 30000 AND Sex = ‘F’ (EMPLOYEE) utiliser une des 3 méthodes suivantes: S7 – Sélection conjonctive en utilisant un indice individuel: Si un attribut impliqué dans une des conditions simples de la condition de sélection conjonctive a un chemin d'accès qui permet l'utilisation l'une des méthodes S2 à S6, utiliser cette condition pour récupérer les enregistrements et puis vérifier si chaque enregistrement récupéré satisfait aux conditions simples restants dans la condition de sélection conjonctive.

Implémentation de l’opération de sélection Méthodes de recherche pour des sélections CONJONCTIVES COMPLEXES Si la condition de sélection est complexe, de la forme: 𝝈Dno=5 AND Salary > 30000 AND Sex = ‘F’ (EMPLOYEE) utiliser une des 3 méthodes suivantes: S8 – Sélection conjonctive à l'aide d'un indice composite: Si deux ou plusieurs attributs sont impliqués dans des conditions d'égalité dans la condition de sélection conjonctive et un index composite (ou une structure de hachage) existe sur les champs combinés. Par exemple, si un index a été créé sur la clé composite (Dno, Salary, Sex), nous pouvons utiliser directement l'index.

Implémentation de l’opération de sélection Méthodes de recherche pour des sélections CONJONCTIVES COMPLEXES Si la condition de sélection est complexe, de la forme: 𝝈Dno=5 AND Salary > 30000 AND Sex = ‘F’ (EMPLOYEE) utiliser une des 3 méthodes suivantes: S9 – Sélection conjonctive par intersection de pointeurs d’enregistrements: Si un index secondaires (ou d'autres chemin d'accès) sont disponibles sur plus d'un des attributs concernés dans des conditions simples de la condition de sélection conjonctive, et si les index comprennent des pointeurs d'enregistrements (plutôt que des pointeurs de bloc) , alors chaque index peut être utilisé pour récupérer l'ensemble de pointeurs d'enregistrements qui satisfont la condition individuelle. L'intersection de ces ensembles de pointeurs d'enregistrements donne les pointeurs d'enregistrements qui satisfont la condition de sélection conjonctive, qui sont ensuite utilisés pour récupérer directement ces enregistrements. Si une partie seulement des conditions ont des index secondaires, chaque enregistrement récupéré est ensuite testé pour déterminer s'il satisfait aux conditions. En général, la méthode S9 suppose que chacun des index est sur ​​un champ non- clé du fichier, parce que si une des conditions est une condition d’égalité sur un attribut clé, alors un seul enregistrement satisfaisait à la condition entière.

Implémentation de l’opération de sélection Méthodes de recherche pour des sélections DISJONCTIVES COMPLEXES Si la condition de sélection est complexe, de la forme: 𝝈Dno=5 OR Salary > 30000 OR Sex = ‘F’ (EMPLOYEE) peu d'optimisation peut être fait, parce que les enregistrements satisfaisant à la condition disjonctive sont l'union des enregistrements répondant aux conditions individuelles. Si une des conditions n'a pas un chemin d'accès  utiliser la force brute, approche linéaire de recherche. Si un chemin d'accès existe sur chaque condition simple dans la disjonction  optimiser la sélection en récupérant les enregistrements satisfaisant chaque condition ​​et appliquer ensuite l’opération union pour éliminer les doublons.

Implémentation de l’opération de jointure

Implémentation de l’opération de jointure Join= opération nécessitant un temps de traitement énorme. On considère les jointures de la forme: 𝑹⋈ A=B 𝑺 Méthodes implémentant la jointure: Diapos suivants: 4 méthodes de recherches implémentant la jointure

Implémentation de l’opération de jointure Si la condition de jointure est de la forme: 𝑹⋈ A=B 𝑺 utiliser une des 4 méthodes suivantes: J1 – Jointure à boucles (blocs) imbriquées : C'est l'algorithme par défaut (brute force), car il ne nécessite pas de chemins d'accès spécifiques de chaque fichier dans la jointure. Pour chaque enregistrement t dans R (boucle externe), récupérer tous les enregistrements s de S (boucle interne) et tester si les deux enregistrements satisfont la condition de jointure t[A] = s[B].

Implémentation de l’opération de jointure Si la condition de jointure est de la forme: 𝑹⋈ A=B 𝑺 utiliser une des 4 méthodes suivantes: J2 – Jointure à boucles simples (en utilisant une structure d'accès pour retrouver les enregistrements): Si un index (ou une clé de hachage) existe pour l'un des deux attributs de jointure (disons attribut B du fichier S), récupérer chaque enregistrement t dans R (boucle sur le fichier R), puis utiliser la structure d'accès (tel qu’un index ou une clé de hachage) pour récupérer directement les enregistrements correspondants s de S qui satisfont s[B]=t[A].

Implémentation de l’opération de jointure Si la condition de jointure est de la forme: 𝑹⋈ A=B 𝑺 utiliser une des 4 méthodes suivantes: J3 – Jointure de tri-fusion: Si les enregistrements de R et S sont triés par valeur des attributs de jointure A et B, respectivement, nous pouvons mettre en œuvre la jointure de la manière la plus efficace possible. Les deux fichiers sont analysés simultanément dans l'ordre des attributs de la jointure, et faire correspondre les enregistrements qui ont les mêmes valeurs pour A et B. Si les fichiers ne sont pas triés, ils peuvent être triés en utilisant d'abord le tri externe.

Implémentation de l’opération de jointure Si la condition de jointure est de la forme: 𝑹⋈ A=B 𝑺 utiliser une des 4 méthodes suivantes: J4 – Jointure de partition-hachage: Les enregistrements des fichiers R et S sont partitionner en petits fichiers. Le partitionnement de chaque fichier se fait en utilisant la même fonction de hachage h sur les attributs jointure A de R et B de S. Phase de partitionnement: Tout d'abord, un seul passage dans le fichier ayant le moins d'enregistrements (disons R) hache ses enregistrements; les enregistrements de R sont cloisonnés dans les buckets de hachage. Après cette phase, nous supposons que la taille du fichier peut tenir entièrement dans la mémoire principale. La collection des enregistrements ayant la même valeur de h(A) sont placés dans la même partition. Phase de sondage: Un seul passage dans l'autre fichier (S) hache alors chacun de ses enregistrements à l'aide de la même fonction de hachage h(B) pour sonder le bucket approprié, et l’enregistrement est combiné avec tous les enregistrements correspondants de R dans ce bucket.

Influence des tampon disponibles et choix du fichier de la boucle externe sur les performances de la jointure à boucles imbriquées J1 L'espace tampon disponible a un effet important. Pour la requête suivante: EMPLOYEE⋈ Dno=Dnumber DEPARTMENT Supposons que le nb de tampons disponibles dans la mémoire principale est nB = 7 blocs. À titre d'illustration , supposons que le fichier DEPARTMENT se compose de rD = 50 enregistrements stockés dans bD = 10 blocs de disque et que le fichier EMPLOYEE se compose de rE = 6000 enregistrements stockés dans bE = 2000 blocs de disque. 7 blocs : 5 blocs pour la boucle externe + 1 bloc pour la boucle interne + 1 bloc de tampon Algo: Lecture de 5 blocs à partir du fichier de la boucle externe, Lecture d’1 bloc à partir du fichier de la boucle interne, utiliser ses enregistrements pour sonder les blocs de boucle externe en mémoire pour trouver les enregistrements correspondants, Les enregistrements joints contenus dans la mémoire tampon sont ajoutés au fichier (sur le disque)

Choix du fichier de la boucle externe Dans la jointure de boucle imbriquée, cela fait une différence quel fichier est choisi pour la boucle externe et quel fichier pour la boucle interne. EMPLOYEE est utilisée en boucle externe Chaque bloc de EMPLOYEE est lu une fois L’ensemble du fichier DEPARTMENT est lu à chaque lecture de nB-2 blocs du fichier EMPLOYEE Nombre total d’accès de bloc (lecture) pour le fichier de la boucle externe = bE. Nombre de fois que (nB-2) blocs de la boucle externe sont chargés en mémoire =  𝑏𝐸 𝑛𝐵−2 . Nombre total d’accès de bloc (lecture) pour le fichier de la boucle interne= bD* 𝑏𝐸 𝑛𝐵−2 . Le nombre total d’accès de bloc (lecture): bE+ bD* 𝑏𝐸 𝑛𝐵−2  = 2000 + 10* 2000 5  = 6000 accès de blocs (+ écriture des blocs réusltants sur le disque).

Choix du fichier de la boucle externe Dans la jointure de boucle imbriquée, cela fait une différence quel fichier est choisi pour la boucle externe et quel fichier pour la boucle interne. DEPARTMENT est utilisée en boucle externe Chaque bloc de DEPARTMENT est lu une fois L’ensemble du fichier EMPLOYEE est lu à chaque lecture de nB-2 blocs du fichier DEPARTMENT Nombre total d’accès de bloc (lecture) pour le fichier de la boucle externe = bD. Nombre de fois que (nB-2) blocs de la boucle externe sont chargés en mémoire =  𝑏𝐷 𝑛𝐵−2 . Nombre total d’accès de bloc (lecture) pour le fichier de la boucle interne= bE* 𝑏𝐷 𝑛𝐵−2 . Le nombre total d’accès de bloc (lecture): bD+ bE* 𝑏𝐷 𝑛𝐵−2  = 10+ 2000* 10 5  = 4010 accès de blocs (+ écriture des blocs réusltants sur le disque).

Choix du fichier de la boucle externe Règle d’or Il est avantageux d’utiliser un fichier ayant moins de blocs en boucle externe qu’en boucle interne dans l’algorithme de jointure à boucle imbriquée.

Implémentation de l’opération de projection

Implémentation de l’opération de projection Une opération de PROJECTION 𝝅 <liste d′attributs> (R) est simple à mettre en œuvre si <liste d′attributs> comprend une clé de la relation R, car dans ce cas le résultat de l'opération aura le même nombre de lignes que R. Si <liste d′attributs> ne comprend pas une clé de R, alors les tuples dupliqués doivent être éliminés. Ceci peut être effectué en: triant le résultat de l'opération, puis en éliminant les tuples dupliqués. utilisant une fonction de hachage pour éliminer les doublons: à chaque fois qu’un enregistrement est haché et inséré dans un bucket du fichier de hachage, on vérifie si l’enregistrement existe déjà dans le bucket; s'il s'agit d'un doublons, on ne l’insère pas dans le bucket.

Implémentation de l’opération de produit cartésien

Implémentation de l’opération de produit cartésien Une opération coûteuse à mettre en œuvre: RxS aura m*n enregistrements (m est le nombre d'enregistrements de R et n le nombre d'enregistrements de S) RxS aura j+k attributs (j est le nombre d'attributs de R et k le nombre d'attributs de S) Par conséquent, il est important d'éviter l'opération de produit cartésien et de la substituer par d'autres opérations telles que la jointure lors de l'optimisation de la requête.

Implémentation des opérations d’union, d’intersection et d’exception

Implémentation des opérations d’union, d’intersection et d’exception La méthode courante pour implémenter ces opérations est d’utiliser une variante de la technique de tri-fusion: Les 2 relations sont triées sur le même attribut Ensuite, un seul balayage de chaque relation est suffisant pour produire le résultat. Le hachage peut être utilisé aussi Une table est tout d’abord scannée et ensuite partitionnée (table de hachage avec des buckets) Les enregistrements de l’autre table sont scannés un à la fois et utilisés pour sonder la partition appropriée.

Implémentation des opérations d’union, d’intersection et d’exception Pour implementer RS, hacher les enregistrements de R, puis hacher les enregistrements de S, mais n’insérer pas les enregistrements dupliqués dans les buckets. Pour implementer RS, hacher les enregistrements de R, puis en hachant les enregistrements de S, sonder le bucket pour voir si un enregistrement identique y existe, si c’est le cas, ajouter l’enregistrement au fichier résultant. Pour implementer R-S, hacher les enregistrements de R, puis en hachant les enregistrements de S, sonder le bucket pour voir si un enregistrement identique y existe, si c’est le cas, supprimer le du bucket.

Implémentation des opérations de min, max, count, avg et sum

Implémentation des opérations de min, max, count, avg et sum Les fonctions d’agrégation peuvent être calculées en scannant la table ou en utilisant un index approprié (s’il est disponible). SELECT MAX(salary) FROM EMPLOYEE Si un index (B+-tree) sur salary existe, suivre le pointeur le plus à droite (le plus à gauche pour MIN) dans chaque noeud d'index de la racine vers la feuille la plus à drotie (la plus à gauche pour MIN). La dernière (première) entrée du nœud est la plus grande (petite) valeur. L’index peut être utilisé pour count, avg et sum seulement si l’index est dense.

Implémentation de l’opération de group by

Implémentation de l’opération de group by SELECT Dno, AVG(Salary) FROM EMPLOYEE GROUP BY Dno; Tout d’abord trier ou hacher sur l’attribut de regroupement pour partitionner le fichier en des groupes appropriés Ensuite, l'algorithme calcule la fonction d'agrégation pour les tuples de chaque groupe. Noter que si un index de groupe (cluster) existe sur les attributs de regroupement, alors les enregistrements sont déjà subdivisés, et il est seulement nécessaire d’appliquer le calcul à chaque groupe.

Combinaison des opérations en utilisant des pipelines

Combinaison des operations en utilisant des pipelines Une requête SQL est traduite en une séquence d'opérations relationnelles. Si les opérations sont exécutées une à la fois, le résultat de chaque opération doit être sauvegardé temporairement sur le disque (surcharge excessive, nécessite trop de temps) Solution: utiliser le résultat d'une opération comme entrée de l'opération suivante sans créer de fichiers temporaires. (pipelining, on-the-fly)

Exemple 1 Considérons la requête: SELECT S.sname FROM Reserves R, Sailors S WHERE R.sid = S.Sid AND R.bid=100 AND S.rating >5 En algèbre relationnel 𝝅 sname(𝝈 bid=100 AND rating>5( Reserves ⋈ sid=sid Sailors)) 𝝅 sname on−the−fly 𝝈 bid=100 AND rating>5 on−the−fly Appliquer la sélection et la projection à chaque uplet du résultat de la jointure au moment de sa production. Le résultat de la jointure avant les selections et les projections n’est pas sauvegardé. J2 Jointure à boucles simples Reserves 𝒄𝒐𝒎𝒎𝒆 𝒇𝒊𝒄𝒉𝒊𝒆𝒓 𝒅𝒆 𝒍𝒂 𝒕𝒂𝒃𝒍𝒆 𝒆𝒙𝒕𝒆𝒓𝒏𝒆 ⋈ sid=sid Reserves Sailors Scan du fichier Scan du fichier

Exemple 2 (A⋈B )⋈C Les deux jointures peuvent être évaluées en pipeline en utilisant une version de jointure à boucles imbriquées J1. Le noeud joignant A et B produit des tuples quand le noeud parent le demande. Quand le noeud parent reçoit ses tuples du fils gauche (table externe), tous les enregistrements internes qui leur correspondent sont retrouvés et joints avec les enregistrements externes. Les tuples externes sont ensuite jetés. Et le processus continue on−the−fly ⋈ ⋈ C A B

Approches pour l’optimisation des requêtes

Approches pour l’optimisation des requêtes Approche heuristique: approche à base de règles Règles heuristiques: pour convertir une requête (arbre) en une requête équivalente (arbre) mais plus efficace EXEMPLE: une des heuristique est d’appliquer les opérations SELECT et PROJECT avant d’appliquer JOIN ou toute autre opération binaire, parce que la taille du fichier résultant depuis la relation binaire est généralement une fonction multiplicative des tailles des fichiers d’entrée. Approche basée sur les coûts

Notation Un arbre de requête est une structure de données qui correspond à une expression de l'algèbre relationnelle. Il représente les entrées (relations) de la requête en tant que nœuds feuilles de l'arbre, et représente les opérations d'algèbre relationnelle comme noeuds internes. L'ordre d'exécution des opérations commencent avec les nœuds feuilles, qui représentent les relations de la base de données, et se termine au niveau du nœud racine, qui représente la dernière opération de la requête. L'exécution se termine lorsque l'opération du nœud racine est exécutée et produit la relation résultante de la requête.

Exemple Requête: Pour chaque projet situé à 'Stafford', récupérer le numéro de projet, le numéro de département de contrôle, le nom, l’adresse et la date de naissance du chef de service. For every project located in ‘Stafford’, retrieve the project number, the controlling department number, and the department manager’s last name, address, and birthdate. SELECT P.Pnumber, P.Dnum, E.Lname, E.Address, E.Bdate FROM PROJECT AS P, DEPARTMENT AS D, EMPLOYEE AS E WHERE P.Dnum=D.Dnumber AND D.Mgr_ssn=E.Ssn AND P.Plocation= ‘Stafford’;

Exemple En algèbre relationnel 𝝅 Pnumber, Dnum, Lname, Address, Bdate (((𝝈 Plocation=‘Stafford’ (PROJECT)) ⋈ Dnum=Dnumber (DEPARTMENT)) ⋈ Mgr_ssn=Ssn (EMPLOYEE))  𝝅 Pnumber, Dnum, Lname, Address, Bdate ⋈ Mgr_ssn=Ssn  ⋈ Dnum=Dnumber EMPLOYEE  𝝈 Plocation=‘Stafford’ DEPARTMENT PROJECT

Exemple Arbre de requête initial 𝝅 Pnumber, Dnum, Lname, Address, Bdate 𝝈 Dnum=Dnumber AND Mgr_ssn=Ssn AND Plocation=‘Stafford’ Χ Χ EMPLOYEE PROJECT DEPARTMENT

Exemple d’une transformation de requête Requête: Trouver les noms des employés nés après 1957 travaillant sur le projet Aquarius. SELECT Lname FROM EMPLOYEE, WORKS_ON, PROJECT WHERE Pname=‘Aquarius’ AND Pnumber=Pno AND Essn=Ssn AND Bdate > ‘1957-12-31’;

Etapes Arbre de requête initial 𝝅 Lname Déplacer SELECT vers le bas Appliquer SELECT restrictive au début 𝝈 Pname=‘Aquarius’ AND Pnumber=Pno AND Essn=Ssn AND Bdate > ‘1957-12-31’ Remplacer 𝝈 et Χ par ⋈ Χ 𝝈 𝝈 Χ PROJECT WORKS_ON EMPLOYEE 𝝈

Etapes Arbre de requête initial Déplacer SELECT vers le bas Appliquer SELECT restrictive au début 𝝅 Lname Remplacer 𝝈 et Χ par ⋈ Déplacer 𝝅 vers le bas ⋈ Essn=Ssn Bdate > ‘1957-12-31’ Pnumber=Pno ⋈ 𝝈 𝝈 EMPLOYEE Pname=‘Aquarius’ WORKS_ON PROJECT

Etapes 𝝅 Lname Arbre de requête initial Déplacer SELECT vers le bas ⋈ Essn=Ssn Appliquer SELECT restrictive au début 𝝅 Ssn, Lname Remplacer 𝝈 et Χ par ⋈ 𝝅 Essn Déplacer 𝝅 vers le bas Pnumber=Pno 𝝈 Bdate > ‘1957-12-31’ ⋈ EMPLOYEE 𝝅 Pnumber 𝝅 Essn,Pno 𝝈 Pname=‘Aquarius’ WORKS_ON PROJECT

Règles de transformations générales Cascade de : 𝜎 𝑐 1 𝐴𝑁𝐷 𝑐 2 𝐴𝑁𝐷 … 𝐴𝑁𝐷 𝑐 𝑛 𝑅 ≡ 𝜎 𝑐 1 𝜎 𝑐 2 … 𝜎 𝑐 𝑛 (𝑅) Commutativité de  : 𝜎 𝑐 1 𝜎 𝑐 2 (𝑅) ≡𝜎 𝑐 2 𝜎 𝑐 1 (𝑅) Cascade de : 𝜋 𝐿𝑖𝑠𝑡𝑒 1 𝜋 𝐿𝑖𝑠𝑡𝑒 2 … 𝜋 𝐿𝑖𝑠𝑡𝑒 𝑛 (𝑅) ≡ 𝜋 𝐿𝑖𝑠𝑡𝑒 1 (𝑅) Commuter  par : 𝜋 𝐴 1 , 𝐴 2 ,…, 𝐴 𝑛 𝜎 𝑐 (𝑅) ≡𝜎 𝑐 𝜋 𝐴 1 , 𝐴 2 ,…, 𝐴 𝑛 (𝑅)

Règles de transformations générales Commutativité de Χ et ⋈: 𝑅 ⋈ 𝐶 𝑆≡𝑆 ⋈ 𝐶 𝑅 𝑅×𝑆≡𝑆×𝑅 Commuter  par Χ ou ⋈: Si tous les attributs de la sélection sont parmi ceux de R. 𝜎 𝑐 𝑅⋈𝑆 ≡ 𝜎 𝑐 (𝑅) ⋈𝑆 Si la condition de la sélection peut s’écrire 𝑐= 𝑐 1 𝐴𝑁𝐷 𝑐 2 , alors 𝜎 𝑐 𝑅⋈𝑆 ≡ 𝜎 𝑐 1 (𝑅) ⋈ 𝜎 𝑐 2 (𝑆) De même si l’opérateur ⋈ est remplacé par Χ.

Règles de transformations générales Commuter  par Χ ou ⋈: Si 𝐿={𝐴 1 ,…, 𝐴 𝑛 , 𝐵 1 ,…, 𝐵 𝑚 }, et 𝑐 ne contient que des attributs de L 𝜋 𝐿 𝑅 ⋈ 𝐶 𝑆 ≡ 𝜋 𝐴 1 ,…, 𝐴 𝑛 (𝑅) ⋈ 𝐶 𝜋 𝐵 1 ,…, 𝐵 𝑚 (𝑆) 𝜋 𝐿 𝑅×𝑆 ≡ 𝜋 𝐴 1 ,…, 𝐴 𝑛 (𝑅) × 𝜋 𝐵 1 ,…, 𝐵 𝑚 (𝑆) Si 𝑐 contient des attributs ne contenant pas dans L 𝜋 𝐿 𝑅 ⋈ 𝐶 𝑆 ≡ 𝜋 𝐿 𝜋 𝐴 1 ,…, 𝐴 𝑛 , 𝐴 𝑛+1 ,…, 𝐴 𝑛+𝑘 (𝑅) ⋈ 𝐶 𝜋 𝐵 1 ,…, 𝐵 𝑚 , 𝐵 𝑚+1 ,…, 𝐵 𝑚+𝑝 (𝑆)

Règles de transformations générales Commutativité des opérations d’ensemble:  et  𝑅∪𝑆≡𝑆∪𝑅 𝑅∩𝑆≡𝑆∩𝑅 Associativité de Χ, ⋈,  et  𝑅𝜃𝑆 𝜃𝑇≡𝑅𝜃 𝑆𝜃𝑇 Commuter  par les opérations d’ensemble :  = , , except 𝜎 𝑐 𝑅𝜃𝑆 ≡ 𝜎 𝑐 𝑅 𝜃 𝜎 𝑐 𝑇  commute avec  𝜋 𝐿 𝑅∪𝑆 ≡ 𝜋 𝐿 𝑅 ∪ 𝜋 𝐿 𝑇 Convertir (,Χ) par ⋈ 𝜎 𝑐 𝑅×𝑆 ≡ 𝑅 ⋈ 𝐶 𝑆

Algorithme En utilisant la règle 1: briser toute sélection avec des conditions conjonctives en une cascade de sélection. En utilisant les règles 2, 4, 6 et 10: déplacer chaque sélection aussi bas dans l’arbre que c’est possible. En utilisant les règles 5 et 9 Placez dans les feuilles les relations avec la sélection la plus restrictive Assurez-vous que l'ordre des feuilles ne provoque pas l’application d’un produit cartésien En utilisant la règle 12: combiner (sélection, produit) en une jointure En utilisant les règles 3, 4, 7 et 11: Décomposer et déplacer la listes des attributs de projection bas dans l'arbre en créant de nouvelles opérations de projection Identifier des sous-arbres représentant des groupes d'opérations qui peuvent être exécutées par un seul algorithme.

Utilisation des estimations de sélectivité et de coûts dans l'optimisation des requêtes Comparer les coûts de l'exécution d'une requête en utilisant différentes stratégies d'exécution et choisir la stratégie présentant la plus faible estimation de coût. Plus adapté pour les requêtes compilées (vs requêtes interprétées): Optimisation est faite au moment de la compilation, Le code est exécuté lors de l'exécution. Les fonctions de coûts sont des estimations et ne sont pas exactes (stratégie d'exécution n'est pas optimale)

Exemple de fonction de coût pour la sélection 𝐶 𝑆 1 =nombre de blocs de données 𝐶 𝑆 3𝑎 =nombre de niveaux d’index + 1 𝐶 𝑆 3𝑏 =nombre de niveaux d’index + 1 𝐶 𝑆 4 = nombre de niveaux d’index + (nombre de blocs de données / 2)