Я использую mysql в двух разных системах. У меня одна система с Ubuntu, а другая с Debian.
Мне нужно создать временную таблицу в какой-то момент, чтобы представить данные, и что действительно странно, так это то, что в системе ubuntu это занимает 400 мс (ответ от браузера), а на debian это занимает более 10 секунд !!!
Я проверил 2 значения в конфигурации mysql, и у меня есть: показать глобальные переменные типа tmp_table_size; что одинаково на обоих серверах: 16777216
Но разница в следующем: показать глобальный статус, например created_tmp_disk_tables; что дает 11 на быстром сервере и 102 на медленном сервере.
Я действительно не знаю, где еще искать и как оптимизировать его, чтобы у меня было то же самое на обоих серверах.
Конечно, мой рабочий сервер находится на Debian.
Работает быстрый сервер: mysql версии 5.7.18-0ubuntu0.16.04.1 Медленный сервер работает: mysql версии 5.5.55-0 + deb8u1
На быстром сервере у меня есть:
show global variables like 'default_tmp_storage_engine';
+----------------------------+--------+
| Variable_name | Value |
+----------------------------+--------+
| default_tmp_storage_engine | InnoDB |
+----------------------------+--------+
1 row in set (0.00 sec)
На медленном сервере у меня есть:
show global variables like 'default_tmp_storage_engine';
Empty set (0.00 sec)
с такими данными, как 1000 строк, что не является огромным
Наверное, настоящая проблема - отобрать эти 1000 строк? Вы можете это проверить?
Можете ли вы проверить переменную конфигурации default_tmp_storage_engine на обоих серверах?
Быстрый сервер отвечает InnoDB, а другой отвечает пустым
MySQL 5.5. и 5.7. отличаются двумя основными версиями и многое делают по-разному. Таким образом, причина, по которой ваш запрос выполняется иначе, может иметь несколько причин. Вам нужно будет оптимизировать ваш 5.5. запрос независимо от 5.7. Трудно помочь вам без дополнительной (в настоящее время у нас ее нет) информации (требуется: запрос (который заполняет временную таблицу), объяснение вывода, описания таблиц, возможно, код, который использует временную таблицу). Сначала вы можете попробовать использовать create temporary table... engine=memory при создании своей временной таблицы.






Предложение рассмотреть для вашего my.cnf-ini
max_heap_table_size=16M # and should always be same as tmp_table_size
ПОКАЗАТЬ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ, КАК "% tmp_table_size", можно использовать в каждой версии, чтобы увидеть, что у вас есть на данный момент.
Глобальная переменная default_tmp_storage_engine была добавлена между 5.5 и 5.7.
Для получения дополнительной помощи, пожалуйста, найдите контактную информацию в моем профиле.
@richard. Сколько времени занимает Debian? Для получения дополнительной помощи, пожалуйста, найдите контактную информацию в моем профиле, Сетевом профиле.
Я обновил mysql до той же версии и использовал engine = memory, и теперь у меня все работает с той же скоростью. Спасибо.
Скажите, пожалуйста, как?
@Richard Если вам нужны дополнительные улучшения производительности, посмотрите мой комментарий от 20 июня в 15:05. Спасибо.
Вы создаете временную таблицу с данными или только с пустой структурой?