Les Vues Et Les Index

Embed Size (px)

Citation preview

  • 7/30/2019 Les Vues Et Les Index

    1/17

    Les vues et les indexVersion 1.0

    Grgory CASANOVA

    James RAVAILLE

    http://blogs.dotnet-france.com/jamesr

    http://blogs.dotnet-france.com/jamesrhttp://blogs.dotnet-france.com/jamesrhttp://blogs.dotnet-france.com/jamesr
  • 7/30/2019 Les Vues Et Les Index

    2/17

    Dotnet France Association CASANOVA Grgory / James RAVAILLE

    2 Les vues et les index [03/07/09]

    Sommaire

    1 Introduction ..................................................................................................................................... 3

    1.1 Prsentation ............................................................................................................................ 3

    1.2 Pr-requis ................................................................................................................................ 3

    2 Prsentation des vues ..................................................................................................................... 4

    2.1 Gnralits sur les vues ........................................................................................................... 4

    2.2 Cration dune vue .................................................................................................................. 4

    2.2.1 Avec du code T-SQL ......................................................................................................... 4

    2.2.2 Avec SSMS ....................................................................................................................... 6

    2.3 Suppression dune vue ............................................................................................................ 9

    2.3.1 Avec du code T-SQL ......................................................................................................... 9

    2.3.2 Avec SSMS ....................................................................................................................... 9

    3 Les index ........................................................................................................................................ 11

    3.1 Gnralits sur les index ....................................................................................................... 11

    3.2 Index ordonns ou non ? ....................................................................................................... 11

    3.2.1 Les index organiss (index cluster) ................................................................................ 11

    3.2.2 Les index non organiss(index non-cluster) .................................................................. 12

    3.3 Crer un index ....................................................................................................................... 12

    3.4 Supprimer un index ............................................................................................................... 13

    3.5 Reconstruire un index ........................................................................................................... 13

    3.6 Mettre jour les statistiques ................................................................................................ 14

    4 Conclusion ..................................................................................................................................... 17

  • 7/30/2019 Les Vues Et Les Index

    3/17

    Dotnet France Association CASANOVA Grgory / James RAVAILLE

    3 Les vues et les index [03/07/09]

    1 Introduction1.1 Prsentation

    Dans les chapitres prcdents, en particulier les chapitres 2 et 3, nous avons prsent les

    bases de donnes SQL Server, ainsi que les objets quelles peuvent contenir. On appelle objet dune

    base de donnes, toute entit qui peut tre comprise dans une base de donnes.

    Nous allons continuer de prsenter ces objets dans ce chapitre, et introduisant et en

    approfondissant les notions concernant les vues et dindex dans une base de donnes, en prsentant

    quels sont leurs buts principaux, et comment les grer.

    1.2 Pr-requisPour une bonne comprhension de ce chapitre, vous aurez besoin au pralable davoir lu les

    sujets suivants :

    - La manipulation de SSMS et de ses fonctionnalits (Chapitre 1).- Connaitre les gnralits sur les bases de donnes relationnelles (Chapitre 2).- Matriser la plupart des actions possibles sur des objets de la base, en tout cas celles que

    nous avons vues (Chapitre 3 et 4). Il est important de noter que nous avons dfini ces

    actions comme tant des actions du DDL dans le chapitre prcdant.

  • 7/30/2019 Les Vues Et Les Index

    4/17

    Dotnet France Association CASANOVA Grgory / James RAVAILLE

    4 Les vues et les index [03/07/09]

    2 Prsentation des vues2.1 Gnralits sur les vues

    SQL Server 2008 permet la gestion dobjets associs aux tables, les vues. On peu t dfinir une

    vue comme tant une table dite virtuelle, qui a la mme utilisation quune table, simplement une vue

    ne prend pas despace sur le disque, puisquelle ne stocke pas les donnes comme une table. Elle nestocke que la requte dextraction des donnes (SELECT).

    Les vues sont un grand avantage quand la gestion des donnes, vis--vis de lutilisateur final.

    En effet, elles permettent tout dabord de simplifier la structure des tables, qui peuvent parfois

    comporter une multitude de colonnes. On pourra alors choisir, en fonction de lutilisateur, les

    colonnes dont il aura besoin, et ninclure que ces colonnes dans notre vue. Une vue peut aussi

    permettre la rutilisation des requtes. En effet, lorsque certaines requtes sont souvent utilises,

    une vue permettra de stocker cette requte et de lutiliser plus facilement. Et bien entendu, latout

    majeur des vues : la scurit daccs aux donnes. Il sera possible au travers de vues, de ne donner

    accs un ou des utilisateurs particuliers, que les colonnes dune table que nous voulons quil voie,et pas les autres. Ce contrle se fait grce la gestion des droits dutilisateurs et de groupes (Ce sujet

    est trait dans la partie Administration de SQL Server 2008). Comme tout les autres objets dune base

    de donnes, on peut crer une vue de deux manires. Par linterface graphique, ou bien par des

    instructions T-SQL dans le registre DDL. Les vues proposent donc des avantages quant leur

    cration :

    - Simplification de la structure des tables.- Rutilisation des requtes.- Scuritdaccs.

    Important : La quasi-totalit des instructions du DML sont applicables sur les vues (INSERT, UPDATE,

    DELETE). Il faut simplement faire attention lors de linsertion aux colonnes nacceptant pas les

    valeurs NULL. De plus, linsertion de donnes au travers dune vue agrgeant des colonnes provenant

    de plusieurs tables est impossible.

    2.2 Cration dune vue2.2.1 Avec du code T-SQL

    La syntaxe de cration dune vue avec du code T-SQL est simple. On utilisera linstructionCREATE, comme pour toute cration dobjet dans une base de donnes.

    Nous utilisons linstruction CREATEVIEW, auquel nous associons le nom que nous voulons lui

    donner. Le mot cl AS indique que nous allons spcifier la requte SELECT qui va nous permettre de

    slectionner les colonnes dune ou plusieurs tables, afin den copier les proprits dans la vue que

    nous crons. Il est bon de prciser que des clauses existantes pour une instruction SELECT classiquene conviendra pas pour une instruction SELECT servant crer nos vues. Ces instructions ne doivent

    pas tre autre que linstruction SELECT, et les clauses FROM et WHERE. Concernant les options 1 et

    2 : loption 1 correspond aux options suivantes : WITH ENCRYPTION, WITH SCHEMABINDING, WITH

    CREATEVIEWNom_Vue[options1]ASrequte [options2]

  • 7/30/2019 Les Vues Et Les Index

    5/17

    Dotnet France Association CASANOVA Grgory / James RAVAILLE

    5 Les vues et les index [03/07/09]

    VIEW_METADATA ; et loption 2 correspond loption suivant : WITH WHECK OPTION. Dcouvrons

    les actions de chacune des ces options sur notre vue.

    WITH ENCRYPTION : permet de crypter le code dans les tables systme. Attention : personnene peut consulter le code de la vue, mme pas son crateur. Lors de la modification de la vue

    avec linstruction ALTER VIEW, il sera ncessaire de prciser de nouveau cette option pour

    continuer protger le code de la vue.

    WITH SCHEMABINDING : permet de lier la vue au schma. Avec cette option, il est impratifde nommer nos objets de la faon suivante : schma.objet.

    WITH VIEW_METADATA : permet de demander SQL Server de renvoyer les mtadonnescorrespondantes la vue, et non celles qui composent la vue.

    WITH WHECK OPTION : permet de ne pas autoriser linsertion ni la modification des donnesne correspondant pas aux critres de la requte.

    Voici un exemple :

    Cet exemple permet de crer une vue dont le nom est Ma_Premire_Vue , avec loption

    WITH ENCRYPTION, et cette vue contiendra les colonnes Id_Client_archive et

    Id_Commande_archive de la table Archive. Vous pourrez alors retrouver votre vue dans le sous

    dossier de votre explorateur dobjet, comme prsent dans limage ci-dessous :

    CREATEVIEWMa_Premiere_VueWITHENCRYPTIONASSELECTId_Client,Nom_ClientFROMdbo.Client

  • 7/30/2019 Les Vues Et Les Index

    6/17

    Dotnet France Association CASANOVA Grgory / James RAVAILLE

    6 Les vues et les index [03/07/09]

    2.2.2 Avec SSMSIl est trs intuitif de crer une vue grce SSMS. Pour de faire, de manire graphique, il vous

    suffit deffectuer un click droit sur le sous dossier Vues dans votre base de donnes, affiche dans

    lexplorateur dobjet. Aprs avoir effectu le click droit, slectionnez Nouvelle vue

    Aprs avoir cliqu sur Nouvelle vue, les deux fentres suivantes apparaissent au sein

    mme de SSMS. La premire vous aidera slectionner des tables sur lesquelles la vue portera. La

    seconde vous permet de slectionner les colonnes utiliser et construire votre requte.

  • 7/30/2019 Les Vues Et Les Index

    7/17

    Dotnet France Association CASANOVA Grgory / James RAVAILLE

    7 Les vues et les index [03/07/09]

    Pour ajouter une table, cliquez sur le nom de la table voulue, et slectionnez Ajouter .

    Vous pouvez en ajouter plusieurs, via lutilisation de la touche [Control]. On remarquera que les

    tables, aussitt slectionnes, sont modlises dans la partie suprieure de la seconde fentre.

  • 7/30/2019 Les Vues Et Les Index

    8/17

    Dotnet France Association CASANOVA Grgory / James RAVAILLE

    8 Les vues et les index [03/07/09]

    Pour slectionner les colonnes mettre dans votre vue, cochez les cases correspondant vos

    colonnes dans les tables modlises dans la partie suprieure de la fentre. Lorsque lon coche des

    cases, on peut remarquer que le nom de ses colonnes est ajout dans la partie centrale de la fentre.

  • 7/30/2019 Les Vues Et Les Index

    9/17

    Dotnet France Association CASANOVA Grgory / James RAVAILLE

    9 Les vues et les index [03/07/09]

    On peut alors modifier le type de tri, lordre, ou encore le filtre de cette vue en changeant les

    caractristiques dans la mme partie. Toutes les actions effectues permettront de gnrer le code

    de la vue. Voici un exemple :

    Lorsque vous avez fini de concevoir votre vue, faites un clic droit sur longlet de la fentre

    dans SSMS, et choisissez Enregistrer . Donnez-lui un nom. Vous venez de crer votre vue.

    2.3 Suppression dune vue2.3.1 Avec du code T-SQL

    La structure de suppression dune vue est la mme que pour tout objet de la base de

    donnes. Elle est la suivante :

    2.3.2 Avec SSMSAvec SSMS, il vous suffit deffectuer un clicdroit sur la vue dans lexplorateur dobjet et de

    slectionner Supprimer et de cliquer sur ok dans la nouvelle fentre qui apparait.

    DROPVIEWnom_vue

  • 7/30/2019 Les Vues Et Les Index

    10/17

    Dotnet France Association CASANOVA Grgory / James RAVAILLE

    10 Les vues et les index [03/07/09]

    Grce au bouton, Afficher les Dpendances , Il est possible de mettre en vidence les

    dpendances existantes entre les objets de la base et la vue slectionne. Une nouvelle fentre

    saffiche lcran, dans laquelle vous pourrez choisir les diffrents types de dpendances.

    Il vous suffit juste de savoir si vous voulez afficher les objets dpendants de la vue ou ceux dont

    dpend la vue en question.

  • 7/30/2019 Les Vues Et Les Index

    11/17

    Dotnet France Association CASANOVA Grgory / James RAVAILLE

    11 Les vues et les index [03/07/09]

    3 Les index3.1 Gnralits sur les index

    Les index que nous allons prsenter dans ce chapitre, sont similaires aux index qui sont

    prsents dans un livre par exemple, ou sur un site web. Si le but de lindex dun livre est de nous

    permettre daccder plus rapidement au sujet qui nous intresse dans ce livre, il en est de mmepour les index dans la base de donnes, la diffrence que ces index vont nous permettre de

    retrouver plus rapidement les donnes stockes dans la base. Si les index permettent de retrouver

    des donnes plus rapidement dans la base de donnes, ils ont un inconvnient majeur : ils sont

    couteux en mmoire et espace disque, surtout dans le cas de mises jours de colonnes indexes. Il

    faut bien garder en tte que les donnes vises par lindex y sont contenues, et donc que ces

    donnes occupent un espace disque non ngligeable. Il est donc ncessaire de bien dfinir la

    stratgie dindexation adopter en fonction des raisons voques plus haut, desquelles on peut

    tablir deux rgles importantes :

    - Il est mieux davoir trop peu dindex que trop. Imaginez quun index existe pour chaquepage dune livre. Il reviendra au mme de feuilleter le livre page page pour trouver ce

    que lon cherche.

    - Les index doivent tre le plus large possible afin de pouvoir tre utiliss par plusieursrequtes.

    Il existe plusieurs types dindex (index ou index-cluster, unique ou non unique). Dans ce

    cours nous mettrons davantage laccent sur leur cration, mise jour et suppression. Nous ne

    traiterons pas des index XML, car leur indexation est particulire. Nous le traiterons dans un chapitre

    propre au traitement des donnes de type XML. De plus, le partitionnement dindex est possible,

    mais cest une solution assez avance en termes de difficult. Nous le traiterons dans un chapitreultrieur.

    Remarque : il faut bien garder en tte que les index sont les catalyseurs de nos requtes. Ils vont

    permettre sur un serveur de plus grande envergure, dobtenir des temps de rponse de plus en plus

    courts, du fait que la requte naura pas accder et parcourir la totalit des donnes dans les

    tables, mais accdera un nombre beaucoup moins consquent de donnes dans notre index.

    3.2 Index ordonns ou non ?Sql server propose deux types dindex pour ses bases de donnes, les index organiss ou

    ordonns (un seul par table), et les index non organiss ou non ordonns (aucun, un ou plusieurs par

    table). Chaque type dindex possde ses avantages et ses inconvnients. Prenons le temps

    dexpliquer les caractristiques de chacun deux.

    3.2.1 Les index organiss (index cluster)Sur chaque table de votre base de donnes, il nest possible de crer quun et un seul index

    organis. Ce type dindex permet dorganiser physiquement les donnes dune table en fonction

    dune colonne. Pour prendre un exemple, une table qui possde une cl primaire possde aussi un

    index ordonn, cest pourquoi les donnes sont ranges en fonction de la colonne o est dfinit la cl

  • 7/30/2019 Les Vues Et Les Index

    12/17

    Dotnet France Association CASANOVA Grgory / James RAVAILLE

    12 Les vues et les index [03/07/09]

    primaire. Ce type dindex est coteux en temps et espace disque pour le serveur lors de la

    construction ou la reconstruction de celui-ci. Il est bon de noter que si des index non ordonns

    existent dj sur une table, la construction dun index sera dautant plus longue quil y aura un

    nombre consquent dindex non ordonns dfinis sur cette table. Enfin, il est bon dviter de dfinir

    des index ordonns sur des champs tels que des noms ou des prnoms, car cette pratique mne

    irrmdiablement la dgradation des performances du serveur.

    3.2.2 Les index non organiss (index non-cluster)Les index non organiss sont les index privilgier pour couvrir plusieurs requtes dans SQL

    Server. En effet, leur utilisation reste couteuse en espace disque, mais les requtes vitent un accs

    inutile la table, puisque seul lindex est manipul. Les performances sont alors amliores

    grandement, puisque la totalit des donnes nest pas manipule, mais seulement une partie des

    donnes, celle stocke dans lindex.

    3.3 Crer un indexUn index peut tre cr nimporte quel moment, quil y ait ou non des donnes dans la table.

    Simplement, il est prfrable de crer lindex aprs une importation majeure de donnes, pour viter

    avoir le reconstruire par la suite, ce qui causera une perte consquente de temps au niveau

    serveur. Voici la syntaxe gnrale de cration dun index, que celui-ci soit ordonn ou non :

    Pour crer un index, nous nous servons de linstruction CREATE INDEX. Les choix compris

    entre les mots cls CREATE et INDEXservent dcider si lindex doit tre ordonn ou non, et sil

    doit tre unique. Avec la clause ON, on dfinit sur quelles colonnes porte lindex et avec la clause

    INCLUDE, on passe en paramtres plus de colonnes de la mme table, afin que les requtes naient

    qu chercher dans lindex lorsquelles sexcutent. La clause ON en toute fin de lot permet de dfinir

    sur quel groupe de fichier nous allons placer notre index. On peut noter que si le groupe de fichier

    nest pas prcis, lindex sera plac dans le groupe de fichier principal. A la suite de la clause WITH,

    nous trouvons les diffrentes options des index, qui par dfaut sont toutes dsactives (OFF) mis

    part FILLFACTOR. Voici le dtail des services que proposent ces options :

    - PAD_INDEX: Prcise le niveau de remplissage du niveau non feuille. Cette option nestutilisable quavec FILLFACTOR dont la valeur est reprise.

    - FILLFACTOR : Prcise le pourcentage de remplissage des pages dindex au niveaufeuille. La valeur par dfaut est 0.

    - IGNORE_DUP_KEY : Cette option autorise les entres doubles dans les index de typeUNIQUE.

    - DROP_EXISTING : Prcise que lindex existant doit tre supprim.

    CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEXNom_IndexONNom_Table(Nom_Colonnes1)[INCLUDE(Nom_Colonnes2)][WITH][PAD_INDEXOFF], [FILLFACTOR=x],[IGNORE_DUP_KEY=OFF], [DROP_EXISTINGOFF],[ONLINE=OFF], [STATISTICS_NORECOMPUTE=OFF][ONNom_Groupe_Fichier]

  • 7/30/2019 Les Vues Et Les Index

    13/17

    Dotnet France Association CASANOVA Grgory / James RAVAILLE

    13 Les vues et les index [03/07/09]

    - ONLINE : Lorsque cette option est active, les donnes de la tables restent accessiblesen lecture, lors de la cration de lindex.

    - STATISTICS_NORECOMPUTE : Dsactiv, cette option prcise que les statistiques neseront pas mise jour.

    Nous allons maintenant crer un index non ordonn sur notre base de donnes Entreprise,

    base de donnes dont nous nous servons pour tous nos exemples dans ce cours. Cette base est

    accessible en annexe. Prenons un exemple simple. Dans notre table Client de la base de donnes

    Entreprise, le mail des client peut tre la valeur NULL. De plus, on remarque que le champ

    Mail_Client nest occup que pour 50% des cas, soit un cas sur deux. Laccs aux donnes est donc

    ralenti par le fait que la plupart des donnes sont NULL. On peu donc crer un index non organis

    de cette manire :

    Avec ce segment de code, nous allons crer un index non organis, qui sappelle Index_Mail,

    sur la table Client, pour la colonne Mail_Client, laquelle nous incluons Id_Client. Cet index va

    rcuprer toutes les informations de la table Client pour laquelle Mail_Client nest pas NULL, ce qui

    va nous permettre dacclrer nos requtes de faon consquente, dans le cas o la masse de

    donnes sur la base est consquente.

    3.4 Supprimer un indexComme chacun le sait dsormais, le mot cl pour supprimer un objet de la base est le mot

    DROP. Nous allons encore une fois lutiliser afin de pouvoir supprimer un index de la base. Voici la

    commande type de suppression dun index :

    La suppression dindex peut avoir plusieurs origines. La plus frquente est la suivante.

    Lorsquun index est trop couteux en maintenance et quil noffre pas de performances significativessur les requtes, il peut tre prfrable de le supprimer.

    3.5 Reconstruire un indexAutrefois, sur les versions antrieures SQL Server 2008, la commande de reconstruction

    dindex tait la suivante : DBCC DBREINDEX. Pour des soucis de compatibilit, cette instruction est

    maintenue, mais il est prfrable de ne plus lutiliser dans le cadre dun nouveau dveloppement.

    Maintenant, il est possible de reconstruire un index avec linstruction ALTER INDEX. Cette

    instruction va nous permettre de reconstruire un index particulier, ou tous les index dune table enparticulier. Lors de cette instruction, nous pouvons changer les caractristiques de lindex que nous

    avons pu proposer lors de sa construction (FILLFACTOR, PAD_INDEX). La syntaxe de

    reconstruction est la suivante :

    -- DROP INDEX Nom_Index ON Nom_Table

    DROPINDEXIndex_MailONClient

    CREATENONCLUSTEREDINDEXIndex_MailONClient(Mail_Client)INCLUDE(Id_Client)

    WHEREMail_ClientISNOTNULL

  • 7/30/2019 Les Vues Et Les Index

    14/17

    Dotnet France Association CASANOVA Grgory / James RAVAILLE

    14 Les vues et les index [03/07/09]

    A la suite de linstruction ALTERINDEX,il est ncessaire de prciser le nom du ou des index

    reconstruire, ou bien de prciser si lon veut que tous les index soient reconstruits en prcisant le

    mot cl ALL. La clause ON permet de prciser de quelle table sont originaires les ventuels index

    reconstruire et le mot cl REBUILD permet de prciser que lon veut reconstruire ces index. La

    dernire clause WITH permet quant elle de prciser les caractristiques des index reconstruire.

    Toutes les options contenues dans le WITH fonctionnent de la mme manire que pour la simple

    construction de lindex.

    3.6 Mettre jour les statistiquesSQL Server utilise des informations statistiques pour optimiser les requtes. Ces informations

    doivent tre mises jour avant une modification importante des donnes. Deux mthodes de mise

    jour de ces informations sont possibles : la manuelle et lautomatique. En revanche, il est fortement

    conseill dutiliser les fonctions automatiques de mise jour de statistiques, pour une unique raison.

    Dans la plupart des cas, la dgradation des performances au niveau serveur est cause

    majoritairement ou en totalit par le fait que ces mises jour statistiques nont pas t faites. Nous

    allons donc prsenter la manire employer pour les mettre jour manuellement, simplement, il est

    fortement conseill de les mettre jour avec le systme automatique. La syntaxe de mise jour des

    statistiques est la suivante :

    Pour mettre jour les statistiques, la syntaxe prsente est la bonne. UPDATESTATICS

    nous permet dannoncer que nous allons mettre jour les statistiques. Il est alors ncessaire de

    prciser le nom de la table concerne, et le nom des index dont les statistiques doivent tre mise

    jour. Si le nom des index est omis, toutes les statistiques de touts les index seront mis jour. La

    clause WITH permet de prciser les modes de mise jour que nous allons utiliser. Dtaillons les

    options possibles :

    - FULLSCAN : Les statistiques vont tre cres avec un balayage complet de la table, soit100% des lignes contenues dans la table prcise en paramtre.

    - SAMPLE : Les statistiques vont tre tablies partir dun chantillon reprsentatif desinformations contenues dans la table prcise en paramtre. La valeur n reprsente la

    valeur que nous voulons des lignes prendre en compte pour notre chantillon, quand

    aux mots cls PERCENT et ROWS, ils permettent de savoir dans lordre, si la valeur de n

    comprend une valeur en pourcentage ou une valeur en nombre de lignes de la table

    indique.

    - RESAMPLE : Permet de redfinir les statistiques partir dun nouvel chantillonnage.

    UPDATESTATICSNom_TableNom_IndexsWITH (FULLSCAN|SAMPLEn(PERCENT|ROWS)|RESAMPLE)

    ALTERINDEX (Nom_Index|ALL)ONNom_TableREBUILD[WITH][PAD_INDEX OFF],[FILLFACTOR = x],[IGNORE_DUP_KEY = OFF],[DROP_EXISTING OFF],[ONLINE = OFF],[STATISTICS_NORECOMPUTE = OFF]

    [ON Nom_Groupe_Fichier]

  • 7/30/2019 Les Vues Et Les Index

    15/17

    Dotnet France Association CASANOVA Grgory / James RAVAILLE

    15 Les vues et les index [03/07/09]

    Comme dit prcdemment, la mise jour des statistiques de manire manuelle est

    proscrire, dans le sens o les mises jour automatiques sont possibles et que les performances de

    notre serveur en dpendent. Voyons de quelle manire nous allons oprer pour permettre nos

    bases de mettre jour automatiquement les statistiques de nos index. Deux manires existent pour

    arriver nos fins. Par linstruction ALTER DATABASE ou par la procdure stocke systme

    sp_autostats. Il faut simplement analyser les besoins que nous avons. Voyons avec les deux optionspossibles :

    - Avec ALTER DATABASE :

    Il suffit de prciser le nom de la base aprs linstruction et de mettre ON loption

    AUTO_CREATE_STATISTICS . Ceci permet la mise jour automatique des statistiques.

    - Avec sp_autostats :

    Lutilisation de la procdure stocke sp_autostats ncessite trois arguments maximum

    dont un seul obligatoire, le nom de la table sur laquelle nous voulons appliquer la mise jour

    automatique des statistiques.

    3.7 Les vues indexesLes vues indexes ont un unique objectif, comme tout autre objet index dans la base de

    donnes : amliorer les performances de nos requtes. Celles-ci sont surement les objets de la base

    offrant le plus de gain de performance dans SQL Server. On se sert le plus souvent de ce type de

    vues, sur des bases de donnes OLAP, c'est--dire pour des donnes qui vont tre le plus souvent en

    lecture, et trs peu mises jour. Ces index sont en particulier pratiques pour des requtes

    ncessitant des jointures et des agrgations. La vue indexe a pour effet de matrialiser les donnes.

    On prend le rsultat de la requte et on le stocke dans lindex. On met ensuite jour lindex en

    fonction des modifications sur la table de base. La cration dun index sur une vue ce fait de la mme

    manire que pour une table, simplement, un index sur une vue prsente de caractres propres de

    fonctionnement et de comportement que nous avons commenc prsenter. Pour une version

    Entreprise de SQL Server, ds lors que votre index est cr, le moteur de base de donnes utiliseracelui-ci. En revanche, pour les autres versions de SQL Server, il faut prciser si lon veut utiliser

    lindex. La mthode est la suivante :

    La clause WITH(NOEXPAND)spcifie quaucune vue indexe nest tendue pour permettre daccder

    aux tables sous-jacentes lorsque loptimiseur de requte traite la requte. Loptimiseur de requte

    traite la vue comme une table avec un index cluster. NOEXPAND sapplique uniquement aux vues

    indexes. Des contraintes sont noter. En effet, il nest possible de crer un index sur une vue que si

    les conditions suivantes sont rassembles :

    - Lors de la cration de la vue, les options ANSI_NULLS et QUOTED IDENTIFIER doivent tresur ON.

    SELECT*FROMvue_ClientWITH(NOEXPAND)

    execsp_autostatsClient

    ALTERDATABASEEntrepriseSETAUTO_CREATE_STATISTICSON

  • 7/30/2019 Les Vues Et Les Index

    16/17

    Dotnet France Association CASANOVA Grgory / James RAVAILLE

    16 Les vues et les index [03/07/09]

    - ANSI_NULL doit tre ON lors de la cration de toutes les tables rfrences dans la vuesur laquelle sera cr lindex.

    - La vue ne doit pas faire rfrence dautres vues.- Toutes les tables rfrences doivent appartenir la mme base et au mme

    propritaire.

    - La vue doit tre cre avec loption WITH SCHEMABINDING.Le premier index cr sur une vue doit tre de type cluster unique. Par la suite il est possible de

    construire des index non cluster.

    Pour faire un rsum rapide, les vues indexes sont pratiques et efficaces dans le cas ou une vue

    possde une quantit remarquable de jointures et dagrgations, et que ces donnes sont surtout en

    lecture sur la base. Enfin, pour une cration sans erreurs de lindex, certaines conditions doivent tre

    respectes.

  • 7/30/2019 Les Vues Et Les Index

    17/17

    17 Les vues et les index [03/07/09]

    4 ConclusionDans ce chapitre, nous avons vu deux objets supplmentaires dans la base : les vues et les

    index. Retenez principalement quune vue est une table virtuelle qui ne stocke pas les donnes mais

    les requtes dextractions associes, et que les index peuvent appartenir deux catgories

    diffrentes, ordonns et non ordonns, et que ceux-ci servent optimiser le temps de rponse du

    serveur lors de lexcution de requtes. Dans le chapitre suivant, nous verrons les notions deprocdures stockes et de fonctions utilisateurs, largement utilises dans SQL Server, puisquelles

    permettent une grande programmabilit et un gain de performance important.