Académique Documents
Professionnel Documents
Culture Documents
1. Introduction 1. Dfinitions 2. Fonctionnalits 3. Architecture logique d'un SGBD 1. Architecture Ansi/Sparc 2. Indpendance donnes - programmes 2. Le modle relationnel de donnes 1. Dfinition formelle 2. Caractristiques des relations 3. Contraintes d'intgrit 3. Les langages relationnels 1. L'algbre relationnelle 2. Les langages prdicatifs (nuplet et domaine) 1. Spcification formelle du calcul relationnel variable nuplet 2. Spcification formelle du calcul relationnel variable domaine 3. Exemple de la base des invitations 4. Le langage SQL 1. Introduction 2. Prsentation de la base exemple Cooprative 3. Le langage de dfinition des donnes 4. Le langage d'interrogation 1. Syntaxe gnrale 2. Requetes mono-relation 3. Expression de jointure 4. Oprateurs ensemblistes 5. Fonctions - Agrgats 6. Partitionnement 7. Quantificateurs 8. Synthse 5. Le langage de mise jour 6. Normalisation de SQL 7. Complments sur intgrit, vues et droits 1. Contraintes d'intgrit 1. Dfinition 2. Exemples 3. Vrification 2. Vues relationnelles 1. Principes 2. Vue relationnelle 3. Evaluation d'une vue 3. Gestion des droits 5. Conception Entit-Association 1. Introduction 2. Les concepts 3. Comparaison modles E/A et relationnel 4. Rgles de passage E/A vers relationnel 5. Des exemples pour illustrer 1. La base de gestion du personnel 2. La base cooprative 6. Avantages - Inconvnients 6. Dpendances fonctionnelles et normalisation 1. Dpendance fonctionnelle sur une relation (DF) 2. Proprits des dpendances fonctionnelles 3. Dcomposition binaire d'une relation 4. Dfinitions : 5. Normalisation des relations (formes normales) 6. Dpendances fonctionnelles et conception de schmas
7. Architecture logicielle d'un SGBD 8. Evaluation et Optimisation de requtes 1. Optimisations algbriques 1. Rgles de transformation de l'algbre relationnelle 2. Algorithme gnral d'optimisation heuristique 2. Optimisation par une fonction de cot 9. Contrle des accs concurrents et reprise 1. Introduction 2. Problmes lis aux accs concurrents 3. Mcanismes pour assurer la concurrence et la reprise 1. Transactions et journalisation 2. Concurrence par verrouillage 3. Granularit de contrle de concurrence 4. Principes gnraux de la reprise 10. Performances des systmes relationnels : benchmarks TPC 11. BIBLIOGRAPHIE
Introduction
Les bases de donnes sont actuellement au cur du systme d'information des entreprises. Les systmes de gestion de bases de donnes, initialement disponibles uniquement sur des "mainframes", peuvent maintenant tre installs sur tous les types d'ordinateurs y compris les ordinateurs personnels. Mais attention, souvent on dsigne, par abus de langage, sous le nom "bases de donnes" des ensembles de donnes qui n'en sont pas. Qu'est-ce donc qu'une base de donnes? Que peut-on attendre d'un systme de gestion de bases de donnes? C'est ces questions, entre autres, que cet ouvrage essaie d'apporter des rponses. Dans un premier temps, et de faon informelle, on peut considrer une Base de Donnes (BD) comme une grande quantit de donnes, centralises ou non, servant pour les besoins d'une ou plusieurs applications, interrogeables et modifiables par un groupe d'utilisateurs travaillant en parallle. Quant au Systme de Gestion de Bases de Donnes (SGBD), il peut tre vu comme le logiciel qui prend en charge la structuration, le stockage, la mise jour et la maintenance des donnes ; c'est, en fait, l'interface entre la base de donnes et les utilisateurs ou leurs programmes. Les limites l'utilisation des fichiers Objectifs des systmes de gestion de bases de donnes Concepts de base Composants des systmes de gestion de bases de donnes Un peu d'histoire
Il faut pouvoir accder aux donnes sans savoir programmer ce qui signifie des langages "quasi naturels". Efficacit des accs aux donnes Ces langages doivent permettre d'obtenir des rponses aux interrogations en un temps "raisonnable". Ils doivent donc tre optimiss et, entre autres, il faut un mcanisme permettant de minimiser le nombre d'accs disques. Tout ceci, bien sur, de faon compltement transparente pour l'utilisateur. Administration centralise des donnes Des visions diffrentes des donnes (entre autres) se rsolvent plus facilement si les donnes sont administres de faon centralise. Non-redondance des donnes Afin d'viter les problmes lors des mises jour, chaque donne ne doit tre prsente qu'une seule fois dans la base. Cohrence des donnes Les donnes sont soumises un certain nombre de contraintes d'intgrit qui dfinissent un tat cohrent de la base. Elles doivent pouvoir tre exprimes simplement et vrifies automatiquement chaque insertion, modification ou suppression des donnes. Partageabilit des donnes Il s'agit de permettre plusieurs utilisateurs d'accder aux mmes donnes au mme moment. Si ce problme est simple rsoudre quand il s'agit uniquement d'interrogations et quand on est dans un contexte mono-utilisateur, cela n'est plus le cas quand il s'agit de modifications dans un contexte multi-utilisateurs. Il s'agit alors de pouvoir : permettre deux (ou plus) utilisateurs de modifier la mme donne "en mme temps" ; assurer un rsultat d'interrogation cohrent pour un utilisateur consultant une table pendant qu'un autre la modifie.
Scurit des donnes Les donnes doivent pouvoir tre protges contre les accs non autoriss. Pour cela, il faut pouvoir associer chaque utilisateur des droits d'accs aux donnes. Rsistance aux pannes Que se passe-t-il si une panne survient au milieu d'une modification, si certains fichiers contenant les donnes deviennent illisibles? Les pannes, bien qu'tant assez rares, se produisent quand mme de temps en temps. Il faut pouvoir, lorsque l'une d'elles arrive, rcuprer une base dans un tat "sain". Ainsi, aprs une panne intervenant au milieu d'une modification deux solutions sont possibles : soit rcuprer les donnes dans l'tat dans lequel elles taient avant la modification, soit terminer l'opration interrompue.
Malheureusement, ces objectifs ne sont pas toujours atteints.
Concepts de base
Pour assurer ces objectifs (surtout les deux premiers), trois niveaux de description des donnes ont t dfinis par la norme ANSI/SPARC.
Niveau interne Description du stockage des donnes au niveau des units de stockage, des fichiers, ... On appelle cette description le schma interne. Niveau conceptuel Description de la structure de toutes les donnes qui existent dans la base, description de leurs proprits (relations qui existent entre elles) c'est--dire de leur smantique inhrente, sans soucis d'implmentation physique ni de la faon dont chaque groupe de travail voudra s'en servir. On appelle cette description le schma conceptuel. Niveau externe Description pour chaque utilisateur de sa perception des donnes. On appelle cette description le schma externe ou vue.
Le rsultat de la conception d'une base de donnes sera une description des donnes. Par description on entend dfinir les proprits d'ensembles d'objets modliss dans la base de donnes et non pas d'objets particuliers. Les objets particuliers sont dfinis par les programmes d'applications lors des insertions et des mises jour des donnes. Ils doivent alors vrifier les proprits des ensembles auxquels ils appartiennent. Cette description des donnes sera effectue en utilisant un modle de donnes. Ce dernier est un outil intellectuel utilis pour comprendre l'organisation logique des donnes. C'est un ensemble de concepts et de rgles pour les utiliser, permettant de construire avec des types de donnes une reprsentation de la ralit. Un systme de gestion de bases de donnes est caractris par le modle de description des donnes qu'il supporte. Les donnes sont dcrites sous la forme de ce modle, grce un langage de description des donnes. Cette description est appele schma. Les modles utiliss sont : rseau, relationnel, objet, ... Une fois la base de donnes spcifie, on peut y insrer des donnes, les rcuprer, les modifier et les dtruire. C'est ce qu'on appelle manipuler les donnes. Les donnes peuvent tre manipules non seulement par un langage spcifique de manipulation des donnes mais aussi par des langages de programmation "classiques".
La description des donnes Cette partie sera constitue des outils (en gros des langages) permettant de dcrire la vision des donnes de chaque utilisateur et l'intgration dans une vision globale. On y trouve aussi les outils permettant de dcrire le stockage physique des donnes. La rcupration des donnes Cette partie prend en charge l'interrogation et la modification des donnes et ce, de faon optimise. Elle est compose de langages de manipulation de donnes spcifiques et d'extensions de langages "classiques". Elle gre aussi les problmes de scurit. La sauvegarde et la rcupration aprs pannes Cette partie comporte des outils permettant de sauvegarder et de restaurer de faon explicite une base de donnes. Elle comporte aussi des mcanismes permettant, tant qu'une modification n'est pas finie, de pouvoir revenir l'tat de la base avant le dbut de
cette modification. Les accs concurrents aux donnes C'est la partie charge du contrle de la concurrence des accs aux donnes. Elle doit tre telle que chaque utilisateur attende le moins possible ses donnes tout en tant certain d'obtenir des donnes cohrentes en cas de mises jour simultanes de la base.
Chacun de ces composants est dcrit de faon plus dtaille par la suite.
Un peu d'histoire
1960 Uniquement des systmes de gestion de fichiers plus ou moins sophistiqus. 1970 Dbut des systmes de gestion de bases de donnes rseaux et hirarchiques proches des systmes de gestion de fichiers. Ces systmes de gestion de bases de donnes avaient rempli certains des objectifs prcdents mais on ne pouvait pas interroger une base sans savoir o tait l'information recherche (on "naviguait") et sans crire de programmes. Sortie du papier de CODD sur la thorie des relations, fondement de la thorie des bases de donnes relationnelles. 1980 Les systmes de gestion de bases de donnes relationnels apparaissent sur le march. 1990 Les systmes de gestion de bases de donnes relationnels dominent le march. Dbut des systmes de gestion de bases de donnes orients objet.
Le modle relationnel
Le modle relationnel a t formalis par CODD en 1970. Quelques exemples de ralisation en sont : DB2(IBM), INFORMIX, INGRES, ORACLE. Dans ce modle, les donnes sont stockes dans des tables, sans prjuger de la faon dont les informations sont stockes dans la machine. Un ensemble de donnes sera donc modlis par un ensemble de tables. Le succs du modle relationnel auprs des chercheurs, concepteurs et utilisateurs est d la puissance et la simplicit de ses concepts. En outre, contrairement certains autres modles, il repose sur des bases thoriques solides, notamment la thorie des ensembles et la logique mathmatique( thorie des prdicats d'ordre 1). Les objectifs du modle relationnel : proposer des schmas de donnes faciles utiliser, amliorer l'indpendance logique et physique, mettre la disposition des utilisateurs des langages de haut niveau pouvant ventuellement tre utiliss par des non informaticiens, optimiser les accs la base de donnes, amliorer l'intgrit et la confidentialit, fournir une approche mthodologique dans la construction des schmas.
De faon informelle, on peut dfinir le modle relationnel de la manire suivante : Les donnes sont organises sous forme de tables deux dimensions, encore appeles relations et chaque ligne n-uplet ou tuple, les donnes sont manipules par des oprateurs de l'algbre relationnelle, l'tat cohrent de la base est dfini par un ensemble de contraintes d'intgrit. Au modle relationnel est associe la thorie de la normalisation des relations qui permet de se dbarrasser des incohrences au moment de la conception d'une base de donnes. Dfinitions Oprateurs relationnels Formes normales Dpendance fonctionnelle Notion de cl Formes normales Langages de manipulation de donnes relationnelles Remarques
Dfinitions
Dfinition (Domaine) : Ensemble de valeurs. Dfinition (Relation) : Sous-ensemble du produit cartsien d'une liste de domaines caractris par un nom. En d'autres termes, une relation n'est ni plus ni moins qu'une table dans laquelle chaque colonne correspond un domaine et porte un nom ce qui rend leur ordre sans aucune importance. Dfinition (Attribut) : Colonne d'une relation caractrise par un nom. Dfinition (Schma de relation) : Nom de la relation, suivi de la liste des attributs avec leurs domaines. Dfinition (Base de donnes relationnelles) : Base de donnes dont le schma est un ensemble de schmas de relations et dont les occurrences sont les tuples de ces relations. Dfinition (Systme de gestion de bases de donnes relationnel) : C'est un logiciel supportant le modle relationnel, et qui peut manipuler les donnes avec des oprateurs relationnels.
Oprateurs relationnels
Dfinition (Projection) : Opration qui consiste supprimer des attributs d'une relation et liminer les tuples en double apparaissant dans la nouvelle relation. Cette opration est note Π. Dfinition (Restriction) : Opration qui consiste supprimer les tuples d'une relation ne satisfaisant pas la condition prcise. Dfinition (Jointure) : Opration qui consiste faire le produit cartsien de deux relations, puis supprimer les tuples ne satisfaisant pas une condition portant sur un attribut de la premire relation et sur un attribut de la seconde. Dfinition (Union) : Opration portant sur deux relations ayant le mme schma et construisant une troisime relation constitue des tuples appartenant chaque relation. Les tuples en double sont limins. Dfinition (Diffrence relationnelle) : Opration portant sur deux relations ayant le mme schma et construisant une troisime relation dont les tuples sont constitus de ceux ne se trouvant que dans une seule relation. Dfinition (Intersection) : Opration portant sur deux relations ayant le mme schma et construisant une troisime relation dont les tuples sont constitus de ceux appartenant aux deux relations.
Formes normales
Dpendance fonctionnelle
Dfinition (dpendance fonctionnelle) : Soit R(A1,A2,...An) un schma de relation, et X et Y des sousensembles de {A1,A2,...An}. On dit que X dtermine Y ou que Y dpend fonctionnellement de X si, et seulement si, des valeurs identiques de X impliquent des valeurs identiques de Y. On le note : X -> Y Dfinition (dpendance fonctionnelle lmentaire) : C'est une dpendance fonctionnelle de la forme X -> Y, o A est un attribut unique n'appartenant pas X et o il n'existe pas X' inclus dans X tel que X -> Y.
Notion de cl
Dfinition (cl de relation) : Soit R(A1, A2, ..., An) un schma de relation, et X un sous-ensemble de (A1, A2, ..., An), X est une cl si, et seulement si, : X -> (A1, A2, ..., An) X est minimal
Formes normales
Dfinition (Premire forme normale) : Une relation est en premire forme normale si et seulement si tout attribut contient une valeur atomique. Dfinition (Deuxime forme normale) : Une relation est en deuxime forme normale si et seulement si : elle est en premire forme normale ; tout attribut n'appartenant pas une cl ne dpend pas que d'une partie de cette cl. Dfinition (Troisime forme normale) : Une relation est en troisime forme normale si et seulement si : elle est en deuxime forme normale ; tout attribut n'appartenant pas une cl ne dpend pas d'un attribut non-cl. Dfinition (Forme normale de BOYCE-CODD) : Une relation est en Forme normale de BOYCE-CODD (BCNF) si, et seulement si, les seules dpendances fonctionnelles lmentaires sont celles dans lesquelles une cl dtermine un attribut.
la recherche retrouver des tuples vrifiant certains critres, l'insertion ajouter des tuples, la suppression enlever des tuples vrifiant certains critres, la modification modifier des tuples vrifiant certains critres.
Un langage de manipulation de donnes n'est pas utilisable lui seul, il doit aussi pouvoir tre incorporable dans un langage de programmation classique. On peut distinguer trois grandes classes de langages : Les langages algbriques bass sur l'algbre relationnelle de CODD dans lesquels les requtes sont exprimes comme l'application des oprateurs relationnels sur des relations. C'est dans cette catgorie que l'on trouve le langage sql(structured query language), standard pour l'interrogation de bases de donnes. Les langages bass sur le calcul relationnel de tuples construits partir de la logique des prdicats dans lesquels les variables manipules sont des tuples. Les langages bass sur le calcul relationnel de domaines, construit aussi partir de la logique des prdicats mais en faisant varier les variables sur les domaines des relations. Le langage sql (Structured Query Language) comprend lui seul l'ensemble des instructions ncessaires la spcification et l'utilisation d'une base de donnes relationnelle. C'est un langage de type dclaratif c'est--dire que l'on spcifie les proprits des donnes que l'on recherche et pas, comme dans un langage impratif, comment les retrouver.
Le langage sql est un langage normalis, la dernire version de la norme date de 92 et, souvent, on y fait rfrence en parlant de sql-92. La prochaine version de la norme est en cours de rdaction afin d'intgrer, entre autres, la notion de types abstraits algbriques, on la dsigne sous le nom de sql3. C'est la fois : un langage d'interrogation de donnes (LID) : SELECT ; un langage de manipulation de donnes (LMD) : UPDATE, INSERT, DELETE ; un langage de dfinition des donnes (LDD) : ALTER, CREATE, DROP; un langage de contrle des donnes et des utilisateurs (LCD) : GRANT, REVOKE.
Remarques
Beaucoup de systmes de gestion de donnes (et non pas de gestion de bases de donnes ) sont vendus comme tant relationnels, souvent parce qu'ils prsentent les donnes sous forme de tables. Un systme est dit minimalement relationnel s'il satisfait aux conditions suivantes : toute information dans la base est reprsente par des valeurs dans des tables, il n'y a pas de pointeurs visibles par l'utilisateur entre les tables, le systme doit supporter au moins les oprateurs relationnels de restriction, projection, jointure naturelle. Un systme est dit compltement relationnel s'il satisfait, en plus, aux conditions suivantes : il supporte tous les oprateurs de l'algbre relationnelle, il supporte la contrainte d'unicit de cl d'une relation, il supporte les contraintes rfrentielles qui permettent de s'assurer que la valeur d'une donne d'une relation existe dans une autre relation (notion de foreign key). En dpit de sa simplicit et de son lgance le modle relationnel n'apporte pas une rponse satisfaisante tous les problmes des applications. Il faut : Pouvoir prendre en compte des "objets" structurs ainsi que les oprations qui leur sont associes (bases de donnes orientes objet). Prendre en compte des donnes peu structures : textes, sons, images, graphiques (bases de donnes multimdia). Faire le pont avec l'intelligence artificielle afin de pouvoir dduire de nouvelles donnes partir de celles existant dj (bases de donnes dductives)
L'optimiseur de requtes
Avec des langages tels que sql, l'utilisateur prcise les proprits des donnes qui l'intressent sans fournir d'algorithme d'accs. Les optimiseurs de requte sont l pour cela, leurs objectifs sont de : vrifier la correction syntaxique de la question, rechercher des questions quivalentes plus simples, dterminer l'ordre des oprations lmentaires d'accs en vue de : rduire le nombre d'entres/sorties, rduire le temps cpu, rduire la taille des ressources mmoires ncessaires, optimiser en premier les questions les plus frquentes. Chaque sgbd contient un optimiseur de requtes qui peut tre lgrement diffrent d'un sgbd l'autre. Les algorithmes utiliss sont rarement connus en dtail mais les grandes tapes de l'optimisation sont en gnral : 1. Reprsenter la requte sous une forme interne et la dcomposer en une squence d'oprations lmentaires. 2. Transformer la requte par : simplification : remplacement d'une question par une question quivalente plus simple, ordonnancement des oprations lmentaires. 3. Construire un ensemble de plans d'excution candidats. 4. Calculer le cot de chaque plan et choisir le meilleur. 5. Excuter la requte.
Rcriture des requtes Choix des chemins d'accs Requte portant sur une seule table Jointures sans index Jointures avec index ORDER BY
Exemple : SELECT * FROM emp WHERE nom = 'MARTIN' AND n_dept = 20; De mme un SELECT avec plusieurs prdicats lis par OR sera excut comme une union du rsultat de plusieurs SELECT bnficiant chacun d'un index. Dans ce cas, il faut que tous les prdicats bnficient d'un index. Exemple : SELECT * FROM emp WHERE nom = 'MARTIN' OR n_dept = 20 ; Dans ces cas il se peut que l'utilisation de l'un des index soit pnalisante. Ce peut tre le cas d'un index peu slectif, alors que les autres index utilisables sont trs slectifs. Dans ce cas l'on peut empcher oracle d'utiliser les index inadquats, en formulant les conditions de telle faon que le critre de recherche soit une fonction de la colonne indexe et non pas la colonne indexe elle-mme (dans ce cas oracle n'utilise pas l'index). Exemple : SELECT * FROM emp WHERE nom = 'MARTIN' AND n_dept + 0 = 20; o les champs nom et n_dept sont indexs. Le fait d'ajouter 0 la colonne n_dept empche d'utiliser l'index sur n_dept, qui ne ferait que ralentir la requte car il est peu slectif. L'index sur nom, qui est trs slectif, suffit. De la mme faon, l'on peut concatner une chane vide une colonne de type caractre pour empcher oracle d'utiliser l'index sur cette colonne : SELECT * FROM emp WHERE nom = 'MARTIN' AND fonction ||''= 'directeur' ;
ORDER BY L'optimiseur d'interrogation d'oracle dcidera dans certains cas de passer par l'index pour slectionner les lignes d'une table selon un certain ordre. Pour cela il faut que : le critre de classement soit le contenu d'une colonne indexe cette colonne ait l'attribut not null (obligatoire) la slection porte sur toute la table (pas de WHERE) Exemple : Le SELECT suivant utilisera l'index sur la colonne salaire si cette colonne ne contient pas de valeurs NULL. SELECT nom, salaire FROM emp ORDER BY salaire ;
Interrogation
Cohrence d'une interrogation
Un utilisateur qui interroge une table (mme trs grande) est garanti de voir toutes les donnes telles qu'elles taient au moment du dbut de l'interrogation, mme si d'autres utilisateurs modifient la table et valident leurs modifications pendant ce temps. Les sgbd dont oracle utilisent alors le fichier image avant pour assurer cette cohrence. Le COMMIT des utilisateurs modifiant la table n'est pas diffr la fin de l'interrogation. Remarque : Ds que l'on interroge une table, un verrou est plac sur la dfinition de la table, c'est dire qu'un autre utilisateur ne peut pas dtruire la table, l'indexer, la mettre en cluster ou modifier sa dfinition, jusqu' ce que l'interrogation soit termine.
Mise jour
Pour s'assurer l'accs exclusif en modification une table, l'on peut verrouiller cette table en mode exclusif par la commande : LOCK TABLE nom_table IN EXCLUSIVE MODE NOWAIT; La table n'est alors accessible aux autres utilisateurs qu'en lecture et ils ne peuvent plus la verrouiller en mode exclusif, ni en mode mise jour partage, ni en mode partag jusqu' la fin de la transaction. Ce verrou est galement obtenu automatiquement ds que l'on effectue un UPDATE, INSERT ou DELETE sur une table. C'est le mode par dfaut de mise jour d'une table.
Les systmes de gestion de bases de donnes permettent plusieurs utilisateurs de travailler en toute scurit sur la mme base ou sur des bases diffrentes. Chaque donne peut tre dfinie, soit comme confidentielle et accessible un seul utilisateur, soit comme tant partageable entre plusieurs utilisateurs. Les ordres GRANT et REVOKE du langage sql permettent de dfinir les droits de chaque utilisateur sur les objets de la base. Tout utilisateur doit possder un nom d'utilisateur et un mot de passe pour pouvoir accder la base. C'est ce nom d'utilisateur qui dterminera les droits d'accs aux objets de la base. Droits d'accs aux tables
GRANT privilege ON {nom_table | nom_vue} TO nom_utilisateur WITH GRANT OPTION ; Les privilges pouvant tre accords sont entre autres les suivants : [update(col,...) ] SELECT
consultation
INSERT
Comme il est impossible de faire une mise jour sur une vue comportant une jointure il faut transformer le critre de jointure en une sous-interrogation. Pour oracle , le nom complet d'une table ou d'une vue est le nom donn par le crateur, prfix par le nom du crateur. Par exemple scott.emp est le nom complet de la table emp cre par l'utilisateur scott . Ceci permet plusieurs utilisateurs de crer des objets de mme nom sans qu'il y ait confusion. En revanche, pour accder un objet dont on n'est pas le crateur, il faut le dsigner par son nom complet incluant le nom du crateur.
Les index
Selon le modle relationnel les slections peuvent tre faites en utilisant le contenu de n'importe quelle colonne et les lignes sont stockes dans n'importe quel ordre. Considrons le SELECT suivant : SELECT * FROM emp WHERE nom = 'MARTIN' Un moyen de retrouver la ou les lignes pour lesquelles nom est gal MARTIN est de balayer toute la table. Un tel moyen d'accs conduit des temps de rponse prohibitifs pour des tables dpassant quelques centaines de lignes. Une solution offerte par tous les systmes de gestion de bases de donnes est la cration d'index, qui permettra de satisfaire aux requtes les plus frquentes avec des temps de rponse acceptables. Un index sera matrialis par la cration de blocs disque contenant des couples (valeurs d'index, numro de bloc) donnant le numro de bloc disque dans lequel se trouvent les lignes correspondant chaque valeur d'index.
Valeurs NULL
Elles ne sont pas reprsentes dans l'index, ceci afin de minimiser le volume ncessaire pour stocker l'index. En contrepartie, l'index ne sera d'aucune utilit pour retrouver les valeurs NULL lorsque le critre de recherche est du type IS NULL.
Conversions
L'index n'est utilisable que si le critre de slection est le contenu de la colonne indexe, sans aucune transformation. Par exemple un index sur salaire ne sera pas utilis pour la requte suivante : SELECT * FROM emp WHERE salaire * 12 > 300000 ; Attention en particulier aux conversions de type qui peuvent empcher l'utilisation de l'index. sql est un langage typ, chaque type de donnes (numrique, caractre, date) ayant ses propres oprateurs, ses propres fonctions et sa propre relation d'ordre. En consquence, si dans une expression, figurent la fois un nombre et une chane de caractres, sql convertira la chane de caractres en nombre. De mme si dans une expression, figurent la fois une chane de caractres et une date, sql convertira la chane de caractres en date. Or, dans un prdicat du type : WHERE fonction(col_indexe) = constante sql ne peut pas utiliser l'index. Ceci peut se produire , de faon insidieuse, lorsque sql est oblig d'ajouter un appel une fonction de conversion cause d'une discordance de type. Exemple : Le prdicat suivant ne bnficiera pas d'un index sur le champ embauche. SELECT * FROM emp WHERE embauche LIKE ' En effet, sql est oblig d'effectuer une conversion, et le prdicat qui sera valu est : WHERE TO_CHAR(embauche) LIKE ' Le critre de recherche est une fonction de embauche, et non le champ embauche lui-mme, dans ce cas l'index est inutilisable.
permettra de rpondre la question : SELECT nom FROM emp WHERE num > 17217 ; sans lire la table puisque toutes les informations se trouvent dans l'index et que l'index est non concatn.
Index concatn
Un index concatn est un index portant sur plusieurs colonnes. Exemple : CREATE INDEX xemp ON (n_dept,num) ; Les index concatns peuvent tre utiliss pour matrialiser une cl compose de plusieurs colonnes. sql sait utiliser un index concatn mme si le critre de recherche ne porte pas sur toutes les colonnes prsentes dans l'index. Exemple : L'index ci-dessus est utilisable si l'on ne connat que le numro de dpartement. SELECT nom FROM emp WHERE n_dept = 20 ;
Les clusters
Buts
Le cluster est une organisation physique des donnes qui consiste regrouper physiquement (dans un mme bloc disque) les lignes d'une ou plusieurs tables ayant une caractristique commune (une mme valeur dans une ou plusieurs colonnes) constituant la cl du cluster. La mise en cluster a trois objectifs : acclrer la jointure selon la cl de cluster des tables mises en cluster, acclrer la slection des lignes d'une table ayant mme valeur de cl, par le fait que ces lignes sont regroupes physiquement, conomiser de la place, du fait que chaque valeur de la cl du cluster ne sera stocke qu'une seule fois. Le regroupement en cluster est totalement transparent l'utilisateur : des tables mises en cluster sont toujours vues comme des tables indpendantes. Par exemple on pourrait mettre en cluster les tables emp et dept selon n_dept. Ces tables seraient rorganises de la faon suivante : un bloc de cluster serait cr pour chaque numro de dpartement, ce bloc contenant la fois les lignes de la table emp et de la table dept correspondant ce numro de dpartement. La jointure entre les tables emp et dept selon n_dept deviendrait alors beaucoup plus rapide, puisqu'elle serait dj ralise dans l'organisation physique des tables. Pour que l'on puisse mettre une table en cluster il faut que l'une au moins des colonnes faisant partie du cluster soit dfinie comme obligatoire (NOT NULL). On peut indexer les colonnes d'une table en cluster, y compris les colonnes correspondant la cl ou une partie de la cl du cluster. La cl elle-mme est automatiquement indexe, on peut ventuellement la rindexer pour crer un index unique servant contrler son unicit.