2011-01-24 4 views
0

У меня есть 2 базы данных: localhost & remotehost. Кажется, что локальный хост работает хорошо и быстро получает мои результаты (до 1 секунды ... благодаря помощи с этой платы). Используя mysqldump, я удалял localhost на remotehost, включая структуру таблицы, индексы, данные &. Я ожидал, что remotehost будет виртуальной репликой localhost, но когда я запускаю свои запросы на remotehost, они берут> 1 минуту, чтобы выполнить. Операторы объяснения даже разные ... существует множество различий, в том числе изменение «типа» на «диапазон», а также используемый индекс.Те же базы данных, но разные объясняют результаты

(некоторые из этого, вероятно, может быть исправлена, заставляя его использовать первичный индекс, но я предпочел бы добраться до корня проблемы и понять, почему RemoteHOST ведет себя по-разному)

МОЕ ЗАЯВЛЕНИЕ:

SELECT names.id, names.first, addr.last FROM names, addr WHERE names.first LIKE 'H%' AND addr.last IS NOT NULL AND names.id = addr.id GROUP BY names.id LIMIT 10 

EXPLAIN заявление от локального хоста:

id| select_type|table|type |possible_keys |key |key_len|ref    |rows|Extra 
1 | SIMPLE  |names|index|PRIMARY,first |PRIMARY|4  |NULL    |448 |Using where 
1 | SIMPLE  |addr |ref |last   |last |4  |files.names.last |25 |Using where 

EXPLAIN заявление от RemoteHOST:

id| select_type|table|type |possible_keys |key |key_len|ref    |rows|Extra 
1 | SIMPLE  |names|range|PRIMARY,first |first |903 |NULL    |955 |Using where; Using temporary; Using filesort 
1 | SIMPLE  |addr |ref |last   |last |4  |files.names.last |25 |Using where 

UPDATE:

Localhost is using mysql version 5.1.46-log. 
Remotehost is using mysql version 5.0.91-log. 
+0

Голосование, чтобы перейти к ServerFault, поскольку это вопрос системного администрирования, а не вопрос программирования. –

+0

, пожалуйста, не ... это вопрос mysql больше всего. На этой доске есть больше экспертов mysql. –

+0

Сравните файлы my.cnf, чтобы убедиться, что на удаленном хосте что-то не так плохо сконфигурировано. Похоже, что вы уже проверили, но убедитесь, что есть индекс на addr.id на remotehost. Также попробуйте запустить «оптимизировать имена таблиц»; на удаленном хосте для обновления статистики. Вы не должны этого делать, но я не уверен, что еще предложить. –

ответ

0

mysqldump --no-data вывод для обеих этих баз данных? Вероятно, они используют разные локали, типы ISAM, разные варианты и т. Д.?

+0

Я запускал его на обоих серверах, и оба они одинаковы ... тот же движок, индексные ключи и т. Д. –

+0

Похоже, у меня нет идей. Единственный способ, который я вижу, - довольно грубая сила - загрузить сборку MySQL с информацией об отладке, подключить gdb и трассировать решения плана запросов ... – GreyCat

0

Run SHOW CREATE TABLE для каждой таблицы и искать различия. Первое, что пришло в голову, - это один из серверов, поддерживающий InnoDB, а другой - нет, поэтому механизмы хранения отличаются. Затем проверьте my.cnf и SHOW VARIABLES на наличие различий.

Похоже, у вас есть другое количество строк в двух базах данных. Это может повлиять на то, какие индексы планировщик решает использовать при выполнении вашего запроса.

+0

У меня такое же количество строк ... Я думаю, причина в том, что это выглядит так, потому что на двух серверах используются разные индексы ... Я дам вашему SHOW CREATE TABLE a go –

+0

Я запустил таблицу создания шоу и они точно такие же ... оба используют MyISAM db ... все остальное, включая индексы, также на 100% одинаково ... weird –

Смежные вопросы