Я использую MySQL 5.5 для Windows и пытаюсь оптимизировать запрос. Тем не менее, я не могу добиться какого-либо прогресса, потому что, когда я его оцениваю, я получаю 131, но если я повторяю его, я получаю 23. Если я подожду некоторое время (примерно 10 минут или около того), он вернется к 131 секундам, но я никогда не знаю, вернется ли он, пока я его не выполню. Поэтому я не могу понять, помогают ли мои оптимизации. Конечно, я предположил, что это вызвано кешем запросов, поэтому отключил его, но я все еще получаю те же результаты.
Это выбор с несколькими внутренними объединениями и парой внешних объединений. Каждая из двух таблиц во внутреннем объединении большая, но обычно она объединяется по индексам. В соединениях есть пара операторов "in".
Итак, мой вопрос: что может вызвать это изменение во времени ответа? Кэширование плана выполнения? Кэширование файлов ОС? Индекс кеширования? Что-то еще?
Спасибо тебе!
Edit:
Вот запрос и размеры таблицы:
выберите количество SQL_NO_CACHE (1)
от reall_big_table_one ml
внутреннее объединение pretty_big_table_one ltl на ml.sid = ltl.sid
внутреннее объединение pretty_big_table_two md на ml.lid = md.lid
внутреннее объединение reference_table ltp на ltl.ltlp_id = ltp.ltlp_id
оставьте присоединиться к pretty_big_table_three o на ml.sid = o.sid и o.cid not in (223041,226855,277890,123953,218150,264789,386817,122435,277902,278466,278430,277911,363986,373233,419863) и o.status_id in (100 400 500 700 800 800 900 000)
оставьте соединение medium_table ar в o.oid = ar.oid и ar.status_id в (1,2)
где ml.date_orig> = '2011-03-01' и ml.date_orig <'2011-04-01' и ml.lid = 910741 </p>
мл имеет 50M рядов
TLT имеет 1 млн. строк
MD имеет 1M строк
Tlp имеет 800 строк
o имеет 7M строк
ar имеет 25K строк