Как итеративно оптимизировать запрос MySQL? - PullRequest
6 голосов
/ 09 апреля 2011

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

Я знаю, чтобы очистить кэш запросов или отключить его между выполнениями. Я также знаю, что на каком-то уровне ОС будет влиять на производительность запросов способами, которые MySQL не может контролировать или понимать. Но в целом, что я могу сделать лучше всего с такой итеративной оптимизацией запросов, чтобы я мог сравнить яблоки с яблоками?

Ответы [ 2 ]

2 голосов
/ 10 апреля 2011

Ваш лучший инструмент для оптимизации запросов - EXPLAIN. потребуется немного времени, чтобы понять, что означает вывод , но после этого вы поймете, как планировщик запросов MySQL (ужасный, сломанный, назад) решает наилучшим образом получить запрошенные данные.

Изменения параметров запроса могут привести к совершенно разным планам запросов, поэтому это может объяснить некоторые проблемы, с которыми вы сталкиваетесь.

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

1 голос
/ 10 апреля 2011

Создайте сценарий, который выполняет запрос 1000 раз, или любое другое количество итераций, которое приводит к стабилизации результатов.

Затем следуйте вашему процессу, как описано выше, но просто убедитесь, что вы полагаетесь не на одно выполнение, а скорее на среднее количество выполнений, потому что вы правы, результаты не будут стабильными при изменении количества строк, а ваша машина занимается другими делами.

Также попробуйте использовать широкий массив входных данных для запроса, если это имеет смысл для вашего варианта использования.

...