Comment MySQL optimise LIMIT
<<<
Comment éviter les scans de tables,,, Vitesse des requêtes INSERT
>>>

7.2 Optimisation des commandes SELECT et autres requêtes
7 Optimisation de MySQL
 Manuel de Référence MySQL 4.1 : Version Française

Syntaxe de EXPLAIN (Obtenir des informations sur les SELECT )
Mesurer les performances d'une requête
Vitesse des requêtes SELECT
Comment MySQL optimise les clauses WHERE
Comment MySQL optimise la condition OR
Comment MySQL optimise IS NULL
Comment MySQL optimise DISTINCT
Comment MySQL optimise les clauses LEFT JOIN et RIGHT JOIN
Comment MySQL optimise ORDER BY
Comment MySQL optimise LIMIT
->Comment éviter les scans de tables,,,
Vitesse des requêtes INSERT
Vitesses des commandes UPDATE
Rapidité des requêtes DELETE
Autres conseils d'optimisation

7.2.11 Comment éviter les scans de tables,,,

EXPLAIN affiche la vlaeur ALL dans la colonne type lorsque MySQL utilise n scan de table pour résoudre une requête. Cela arrive lorsque :
  • La table est si petite qu'il est plus rapide de scanner la table que d'utiliser les index. C'est un cas courant pour les tables de moins de 10 lignes, et de taille de ligne faible.
  • Il n'y a pas de restriction exploitable sur les conditions ON et WHERE , avec les colonnes indexées.
  • Vous comparez des colonnes indexées avec des constantes, et MySQL a calculé, en se basant sur l'arbre d'index, que les constantes couvrent une trop grande partie de la table : un scan devrait être plus rapide. Comment MySQL optimise les clauses WHERE .
  • Vous utilisez une clé avec une cardinalité faible (c'est à dire, beaucoup de lignes sont trouvées). MySQL va alors supposer que l'utilisation de l'index va lui imposer beaucoup de recherches, et qu'un scan de table sera plus rapide.
Ce que vous pouvez faire pour éviter les scans de grosses tables : s
  • Utilisez ANALYZE TABLE sur les tables scannées pour optimiser la distribution des clés. Syntaxe de ANALYZE TABLE .
  • Utilisez FORCE INDEX sur les tables scannnées, pour dire à MYSQL que les scans de tables sont trop coûteux, comparé à l'utilisation de l'index. Syntaxe de SELECT .
    
    SELECT * FROM t1,t2 force index(index_for_column) WHERE t1.column=t2.column;
    
  • Lancez mysqld avec --max-seeks-for-key=1000 ou faites SET MAX_SEEKS_FOR_KEY=1000 pour dire à l'optimiseur que les scans sans index ne généreront pas plus de 1000 recherches dans les index. Variables sytème du serveur .

<< Comment éviter les scans de tables,,, >>
Comment MySQL optimise LIMIT Optimisation des commandes SELECT et autres requêtes Vitesse des requêtes INSERT