Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Percona 5.6 InnoDB-Problem verwendet Indexe nicht korrekt

Das klingt wie:Bug #70617 Persistente Standardstatistiken können unerwartet lange Abfragezeiten verursachen

Für das, was es wert ist, ist dies kein Percona-Bug, er ist auch in der MySQL 5.6 Community Edition vorhanden.

Es gibt drei mögliche Problemumgehungen:

  1. Verwenden Sie STRAIGHT_JOIN, um dem Optimierer einen Hinweis zu geben, Tabellenreferenzen nicht neu anzuordnen.

    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
    

    Ich habe Ihren JOIN umgeschrieben, um die von mir empfohlene SQL-92-Syntax zu verwenden.

  2. Deaktivieren Sie die neuen dauerhaften InnoDB-Statistiken Funktion, die zum Verhalten vor 5.6 zurückkehrt.

    In Ihrer my.cnf-Datei:

    innodb_stats_persistent=0
    
  3. Aktualisieren Sie die Statistiken des InnoDB-Optimierers manuell, nachdem Sie eine wesentliche Änderung an den Daten vorgenommen haben (z. B. nach dem Laden eines mysqldump):

    ANALYZE TABLE items;
    ANALYZE TABLE formats;
    

PS:Ich arbeite bei Percona und dieser Fehler wurde von meinem Kollegen Justin Swanhart entdeckt .