Ответ сообщества Wiki, полученный из комментариев на вопрос Раймонда Нейланда
Использование EXPLAIN
. Таким образом, вы можете увидеть, МОЖЕТ ли запрос для ввода-вывода диска. Вам нужно избегать в колонке лишних «Использование временных» или «Использование временных»; Использование сортировки файлов (обратите внимание, что сортировка файлов - вводящее в заблуждение имя: если результирующий набор помещается в память, быстрая сортировка запускается в памяти) ".
Скорее всего, это вызвано подзапросами / объединениями / упорядочением / group by / ... Если у вас большой результат и создана временная таблица на диске MyISAM, и вам нужно отсортировать результат, вы сортируете результат устанавливается на основе операций чтения и ввода-вывода с использованием алгоритма быстрой сортировки.
В разделе Использование внутренней временной таблицы в MySQL вы можете прочитать, когда MySQL необходимо создать таблицу MyISAM на основе диска. Возможно, вы можете использовать строки avg_row_length * (хотя обратите внимание, что значение строки из объяснения не является точным с движком InnoDB), чтобы проверить, помещается ли результат в кучу. См. ПОКАЗАТЬ Синтаксис ТАБЛИЦЫ .
В целом лучше ли InnoDB или MyISAM избегать запросов ввода-вывода?
InnoDB будет буферизовать данные таблицы и индексировать данные, тогда как MyISAM буферизует только ключи индекса. Ввод / вывод данных таблицы необходим, когда в дополнительном столбце объяснения не указано «Использование индекса».
Если оба используют индексы: с InnoDB, если буфер горячий, он может загружать данные из памяти. Если индексы должны поступать с диска, существует формула, которую вы можете использовать для расчета необходимых операций чтения-вывода для операций выбора, вставки и обновления. Из оценки производительности запроса :
Для небольших таблиц обычно можно найти строку в одном поиске на диске (поскольку индекс, вероятно, кэшируется). Для больших таблиц вы можете оценить, что, используя индексы B-дерева, вам нужно много попыток найти строку:
log(rows) / log(index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1
Индексы InnoDB больше, потому что они хранят данные из ключа PRIMARY / UNIQUE в индекс KEY. Это быстрее и требует еще меньше операций ввода-вывода, но вы можете сжать данные или индексы InnoDB.