MySQL: почему команда объяснения дает разные результаты для одного и того же оператора SQL?

Я перенес базу данных MySQL из одной среды в другую и обнаружил, что после миграции определенный запрос выполняется крайне медленно, чем был.

Я исследовал оператор с помощью ключевого слова объяснения (ниже) и обнаружил, что команда объяснения дает разные результаты на разных серверах.

explain select distinct j.job,f.path,p.path  
from fixes f
join  jobs j on  f.job=j.id 
join  paths p  on p.id =f.path  
where p.path like '//depot1/Dev\-trunk/%' ;

Для оригинального, это дает:

    1   SIMPLE  p   range   PRIMARY,path    path    752     **19**  Using where; Using index; Using temporary
    1   SIMPLE  f   ref path,job    path    8   p.p.id  **6448356** 
    1   SIMPLE  j   eq_ref  PRIMARY PRIMARY 8   p.f.job **1**   

И тот же оператор дает различный вывод в новой среде:

    1   SIMPLE  j   index   PRIMARY job 62      **68486**   Using index; Using temporary
    1   SIMPLE  f   ref path,job    job 8   p.j.id  **812** 
    1   SIMPLE  p   eq_ref  PRIMARY,path    PRIMARY 8   p.f.path    **1**   Using where

1 ответ

Решение

К вашему сведению, выясняется, что при переносе базы данных для оптимизатора движка используются некоторые статистические данные, чтобы определить наилучшую стратегию, например, для объединения таблиц, которая, очевидно, не была скопирована.

Решение состоит в том, чтобы запустить ANALYZE на каждой из таблиц, чтобы "перестроить" такую ​​информацию. Таким образом, выполнив АНАЛИЗ для каждой таблицы и запустите explain Команда снова выводит согласие и скорость запроса резко возрастает.

Другие вопросы по тегам