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.