Достаточно часто, при выборке из нескольких таблиц с большим объемом данных вкупе с использованием операторов объединения JOIN или UNION, возникает серьезная нагрузка на дисковую систему, связанная с тем, что данные большого объема записываются на диск во временную директорию.
Особенно сильно это может проявляться на загруженных виртуальных выделенных серверах (VDS). Если у Вас на сервере наблюдается такая проблема, а также имеется достаточный запас свободной оперативной памяти, проблему можно решить, вынесением директории для временных файлов MySQL в ОЗУ.
Пример решения будет рассмотрен для ОС Debian 5, но может быть с легкостью перенесен на любой другой дистрибутив Linux.
Шаг 1. Создайте директорию, в которую будет монтироваться раздел в оперативной памяти.
#mkdir /mysql_tmp #chown mysql /mysql_tmp #chmod 755 /mysql_tmp
Шаг 2. Создайте раздел в оперативной памяти и примонтируйте его в директорию /mysql_tmp.
В файл /etc/fstab добавьте строку:
none /mysql_tmp tmpfs noexec,nosuid,size=512M 0 0
После чего выполните команду:
#mount /mysql_tmp
Шаг 3. Пропишите новую директорию для временных файлов в конфигурации MySQL и перезапустите сервер баз данных.
В файле /etc/mysql/my.cnf найдите строку
tmpdir = /tmp
и замените ее на строку
tmpdir = /mysql_tmp
После чего выполните команду:
#/etc/init.d/mysql restart
Все, на этом настройка закончена. Теперь MySQL будет писать временные файлы в оперативную память, что должно существенно снизить нагрузку на дисковую систему.
Источник: Оптимизация работы сервера MySQL с большими таблицами и сложными JOIN-запросами - http://blog.io-hosts.ru/2011/01/mysql/