Почему mysql показывает 2 разных результата на 2 разных серверах для одного и того же запроса

У меня есть один и тот же оператор MySQL SQL, работающий в двух разных базах данных (моя локальная машина и моя производственная машина). Тот, что на моей локальной машине, работает быстрее, а тот, что на производстве, — медленнее. Вот результаты EXPLAIN по каждому из них.

Локальный компьютер введите здесь описание изображения

Производственный станок введите здесь описание изображения

Я бы предпочел не публиковать точный запрос, если мне это не нужно.

Единственная разница, которую я могу сказать между ними, заключается в том, что на моей локальной машине работает версия 5.6, а на рабочем сервере — 5.5. Кроме того, данным на моем сервере 3 дня, а это не так много записей. В частности, я смотрю на строку 2 объяснения, где один тип читает «ссылка», а другой читает «ВСЕ», и есть разница в более чем 28 тысячах читаемых строк. Единственная разница между двумя структурами — это поле TimeModified, которое не используется запросом.


person Andrew    schedule 21.04.2014    source источник
comment
Я не уверен, что здесь достаточно подробностей, чтобы действительно дать ответ - помимо возможного ответа, который вы уже включили в свой вопрос.   -  person Nathan    schedule 22.04.2014
comment
Почему люди, которых вы никогда не встречали в Интернете, считают, что данные на двух серверах одинаковы? Очевидно, что explain имеет разные оценки/подсчеты количества строк, поэтому объяснение заключается в том, что данные разные.   -  person Gordon Linoff    schedule 22.04.2014
comment
Я бы сказал, что ваши базы данных не одинаковы, либо у них разные структуры таблиц, либо у них разные данные - и размер ваших данных может повлиять на план выполнения.   -  person Simon Groenewolt    schedule 22.04.2014
comment
Легко: у вас нет идентичной базы данных, то есть данных внутри нее.   -  person Jonast92    schedule 22.04.2014
comment
В MySQL 5.5 и более ранних версиях доступ к производной таблице всегда осуществляется путем полного сканирования; MySQL 5.5 никогда не создает индекс для производной таблицы. Но MySQL 5.6.3 может добавить индекс к производной таблице.   -  person spencer7593    schedule 22.04.2014


Ответы (2)


В MySQL 5.5 и более ранних версиях производная таблица никогда не имела индексов. Единственным способом доступа к производной таблице было полное сканирование. (Это ALL, которое вы видите в выходных данных EXPLAIN с сервера 5.5.)

В MySQL 5.6.3 у MySQL есть возможность добавлять индекс к производной таблице, что может повысить производительность. (Обратите внимание на имя индекса: <auto_key1> в выходных данных EXPLAIN с сервера 5.6).

Ссылка: https://dev.mysql.com/doc/refman/5.6/en/subquery-optimization.html

person spencer7593    schedule 21.04.2014
comment
Я обновлю БД до 5.6 и посмотрю, ускорит ли это запрос. - person Andrew; 22.04.2014
comment
Апгрейд сделал свое дело. Спасибо. - person Andrew; 23.04.2014

Сначала я поставил это как комментарий, но я думаю, что это также и ответ :-)

Структуры ваших таблиц могут быть идентичными, но ваши данные, вероятно, нет.

Количество строк в ваших таблицах будет влиять на план выполнения.

person Simon Groenewolt    schedule 21.04.2014