MySQL utilise un optimiseur de coûts pour trouver le meilleur moyen de résoudre une requête. Dans de nombreux cas, MySQL peut calculer la meilleure solution pour une requête, mais parfois, MySQL n'a pas les informations nécessaires, et il fait des évaluations.
Pour les cas où MySQL ne fait pas le "bon" choix, des outils sont disponibles, pour que vous aidiez MySQL :
Utilisez la commande EXPLAIN
pour savoir
comment MySQL va traiter la requête. Pour l'utilisez, ajoutez
simplement le mot clé EXPLAIN
avant votre
requête SELECT
:
mysql> EXPLAIN SELECT * FROM t1, t2 WHERE t1.i = t2.i;
EXPLAIN
est présenté en détails dans la
section Section 7.2.1, « Syntaxe de EXPLAIN
(Obtenir des informations sur les
SELECT
) ».
Utilisez la commande ANALYZE TABLE tbl_name
pour mettre à jour les distributions de clés dans la table
traitée. See Section 13.5.2.1, « Syntaxe de ANALYZE TABLE
».
Utilisez l'option FORCE INDEX
pour la table
scannée, pour dire à MySQL que les scans de tables sont
très coûteux, comparés aux scans d'index. See
Section 13.1.7, « Syntaxe de SELECT
».
SELECT * FROM t1, t2 FORCE INDEX (index_for_column) WHERE t1.col_name=t2.col_name;
USE INDEX
et IGNORE
INDEX
peuvent aussi être utiles.
STRAIGHT_JOIN
de niveau global ou table.
See Section 13.1.7, « Syntaxe de SELECT
».
Vous pouvez paramétrer les variables globales ou spécifiques
au thread. Par exemple, lancez mysqld
avec
l'option --max-seeks-for-key=1000
ou utilisez
SET max_seeks_for_key=1000
pour dire à
l'optimiseur qu'il doit supposer que les scans de clés ne
représenteront pas plus de 1000 recherches. Voyez
Section 5.2.3, « Variables serveur système ».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.