AccueilđŸ‡«đŸ‡·Chercher

Optimisation de requĂȘte

L'optimisation de requĂȘte est une opĂ©ration dans laquelle plusieurs plans d'exĂ©cution[1] d'une requĂȘte SQL sont examinĂ©s pour en sĂ©lectionner le meilleur.

L'estimation de leurs coûts dépend du temps d'exécution et du nombre de ressources utilisées pour y parvenir, elle se mesure en entrées-sorties. Typiquement les ressources coûteuses sont l'utilisation du processeur, la taille et la durée des tampons sur le disque dur, et les connexions entre les unités du parallélisme. Plusieurs SGBD comme Oracle et MySQL possÚdent des fonctions permettant d'effectuer ces calculs, via un optimiseur.

Il existe deux types d'optimisation :

  • Le plan d'exĂ©cution logique (PEL), qui dĂ©pend de l'algĂšbre relationnelle.
  • Le plan d'exĂ©cution physique (PEP) qui tient compte des index et de la taille des donnĂ©es.

Principes

D'une maniĂšre gĂ©nĂ©rale, il convient d'effectuer par prioritĂ© dĂ©croissante dans le langage de requĂȘte :

  • Les sĂ©lections, afin de rĂ©duire le plus grand nombre de donnĂ©es en mĂ©moire. Dans la mesure du possible il faut Ă©viter les wildcards (*) qui engendrent plus de transfert d'information en rĂ©seau (ex : ID ou dates de mises Ă  jour inutiles).
  • Les projections, toujours pour diminuer la taille des donnĂ©es.
  • Les tris, pour accĂ©lĂ©rer les jointures.
  • Les jointures. Les diffĂ©rents plans d'exĂ©cution examinĂ©s sont constituĂ©s des diffĂ©rents chemins d'accĂšs (ex : accĂšs aux index primaires et secondaires) et de la variĂ©tĂ© des techniques de jointure selon les hints :
    1. tri fusion (merge join)
    2. hashage (hash join)
    3. boucle imbriquée (nested loop join)
    4. produit (product join).

De mĂȘme, si l'ordre des conditions dans le WHERE ne modifie jamais le rĂ©sultat obtenu[2], il peut en revanche avoir un impact important sur les performances[3]. En effet, il est prĂ©fĂ©rable de :

  • Placer les conditions qui filtrent le plus d'enregistrements avant les autres (cela nĂ©cessite en gĂ©nĂ©ral de connaitre la taille courante des tables).
  • VĂ©rifier l'emploi du mot clĂ© BETWEEN, qui peut consommer plus de ressources en allant chercher des octets fragmentĂ©s sur le disque, qu'un parcours sĂ©quentiel de table.
  • S'assurer que les LIKE ne sont pas remplaçables par des =.
  • S'assurer que les CURSOR (en) ne sont pas remplaçables.

Notes et références

  1. Sciences des données : De la logique du premier ordre à la Toile, Serge Abiteboul
  2. (en) Ken Henderson, The Guru's Guide to Transact-SQL, Addison-Wesley Professional, (lire en ligne)
  3. (en) Kevin Kline, SQL in a Nutshell : A Desktop Quick, O'Reilly Media, Inc., (lire en ligne)

Voir aussi

Articles connexes

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.