Mysql
 sql >> база данни >  >> RDS >> Mysql

Проблемът с Percona 5.6 InnoDB не използва индексите правилно

Това звучи така:Бъг #70617 Постоянните статистически данни по подразбиране могат да причинят неочаквани дълги времена на заявка

За какво си струва, това не е грешка в Percona, присъства и в изданието на общността MySQL 5.6.

Има три възможни решения:

  1. Използвайте STRAIGHT_JOIN, за да дадете намек на оптимизатора да не пренарежда препратките към таблицата.

    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
    

    Пренаписах вашето JOIN, за да използва синтаксис SQL-92, което препоръчвам.

  2. Деактивирайте новата постоянната статистика на InnoDB функция, връщане към поведение от преди 5.6.

    Във вашия my.cnf файл:

    innodb_stats_persistent=0
    
  3. Опреснете ръчно статистиката на оптимизатора на InnoDB, след като направите значителна промяна в данните (например след зареждане на mysqldump):

    ANALYZE TABLE items;
    ANALYZE TABLE formats;
    

PS:Работя в Percona и тази грешка беше открита от моя колега Justin Swanhart .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да накарам заявката да се прехвърли към следващите страници при пагиниране на резултатите

  2. Затварянето на набор от резултати за поточно предаване (с помощта на mysql jdbc) отнема много време

  3. MySQL ранг в случай на връзки

  4. wildfly регистрира mysql като източник на данни

  5. Използвайте MySQL конзолата чрез скрипт PowerShell