PRATIQUE OUTILS 
Donner des indices au moteur MySQL
 
5 mots-clefs pour mieux contrôler la gestion des données du SGBD Open Source. (15/06/2005)
  Forum

Réagissez dans les forums de JDN Développeurs

Le SGBD libre MySQL propose au développeur de lui indiquer ce qu'il peut attendre d'une requête particulière, afin qu'il puisse adapter son optimisateur interne, et se préparer aux données à traiter.
Cinq "indices" ont donc été conçus pour potentiellement accélérer les requêtes SQL. Elles se placent directement au sein de la requête SELECT.

- SELECT SQL_BUFFER_RESULTS ...
Force MySQL à créer un jeu de résultat temporaire. Dès que celui-ci est rempli, les tables verrouillées par la requête sont libérées. Cet indice peut se révéler particulièrement salvateur dans le cas de conflit de tables verrouillées, ou si le résultat prend trop longtemps à arriver.

- SELECT SQL_SMALL_RESULT ... GROUP BY ...
Indique à l'optimisateur que le jeu de résultats ne prendra que quelques lignes. MySQL utilisera alors une table temporaire créée en mémoire.

- SELECT SQL_BIG_RESULT ... GROUP BY ...
Indique à l'optimisateur que le jeu de résultats prendra de nombreuses lignes. Ici aussi, MySQL utilisera une table temporaire créée en mémoire.

- SELECT STRAIGHT_JOIN ...
(remplace JOIN) Oblige l'optimisateur à appliquer le JOIN sur les tables dans l'ordre dans lequel elles ont été listées au sein du FROM de la requête. La table à gauche sera ainsi toujours avant la table à droite, dans la requête. Cela permet de venir à bout des jointures placant les tables dans le mauvais ordre.

- SELECT ... FROM tableA USE INDEX (index_list) tableB
SELECT ... FROM tableA IGNORE INDEX (index_list) tableB

Demande à MySQL de prendre en compte ou d'ignorer les index indiqués.
 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page