Mysql
 sql >> Base de données >  >> RDS >> Mysql

Le problème Percona 5.6 InnoDB n'utilise pas correctement les index

Cela ressemble à :Bug #70617 Les statistiques persistantes par défaut peuvent entraîner des temps de requête longs inattendus

Pour ce que ça vaut, ce n'est pas un bogue Percona, il est également présent dans MySQL 5.6 community edition.

Il existe trois solutions possibles :

  1. Utilisez STRAIGHT_JOIN pour indiquer à l'optimiseur de ne pas réorganiser les références de table.

    SELECT STRAIGHT_JOIN
      i.item_name, i.item_key, i.item_date, f.format_long
    FROM items i
    INNER JOIN formats f
      ON i.item_format = f.format_id
    WHERE i.item_private = 0 
    ORDER BY i.item_id DESC LIMIT 8
    

    J'ai réécrit votre JOIN pour utiliser la syntaxe SQL-92, ce que je recommande.

  2. Désactiver les nouvelles Statistiques persistantes InnoDB fonctionnalité, revenant au comportement antérieur à la version 5.6.

    Dans votre fichier my.cnf :

    innodb_stats_persistent=0
    
  3. Actualisez manuellement les statistiques de l'optimiseur InnoDB après avoir apporté une modification importante aux données (par exemple, après le chargement d'un mysqldump) :

    ANALYZE TABLE items;
    ANALYZE TABLE formats;
    

PS :Je travaille chez Percona, et ce bug a été découvert par mon collègue Justin Swanhart .