Я тестирую метод с довольно большим sql-запросом. У меня около 15 объединений, один подзапрос с двумя объединениями, поэтому он сложный. Но каждый бег занимает различное время. Однажды это 4 секунды, иногда 80 или даже 200 секунд. Он стандартный unit test, с подготовкой данных с FactoryGirl, и данные всегда одинаковы.
Есть ли какие-либо профилировщики mysql, параметры mysql или другие инструменты, которые могут показаться для меня, почему существуют большие различия во времени выполнения? Как это понять?
Хорошая вероятность того, что MySQL кэширует результаты некоторых подзапросов и/или объединений, что будет легко учитывать изменения, которые вы видите в ответном времени.
Что касается профайлера, то при выполнении google для "mysql profiler" появился эта ссылка, а также предыдущий вопрос здесь, на SO, задавая тот же вопрос.
EXPLAIN
. Просто поместитеEXPLAIN
перед вашим запросом, и он даст вам некоторое представление о том, как mysql собирается собирать ваши данные.