MySQL TEXT производительность поля

У меня есть несколько полей TEXT и / или MEDIUMTEXT в каждой из наших 1000 таблиц MySQL. Теперь я знаю, что поля TEXT записываются на диск, а не в память при запросе. Это также верно, даже если это поле не вызывается в запросе? Например, если у меня есть таблица (tbExam) с 2 полями (id int(11) и текст комментария), и я запускаю SELECT id FROM tbExam, MySQL все еще должен записать это на диск перед возвратом результатов или он выполнит этот запрос в памяти?

Я пытаюсь выяснить, нужно ли мне перенастроить наши фактические таблицы БД, чтобы перейти на varchar(xxxx) или оставить текстовые поля и перенастроить запросы.

1 ответ

Решение

Теперь я знаю, что текстовые поля записываются на диск, а не в память при запросе

TEXT поля записываются на диск только тогда, когда для запроса требуется временная таблица для хранения промежуточных результатов нескольких операций сортировки или агрегирования. Это, например, происходит, когда вы смешиваете DISTINCT, ORDER BY а также GROUP BY на разных столбцах в пределах одного запроса.

Если твой TEXT столбец не является частью этой временной таблицы, MySQL сначала попытаться создать его с помощью MEMORY двигатель (который не поддерживает TEXT).

MyISAM Движок для временной таблицы будет выбран только в том случае, если размер этой таблицы превысит @@tmp_table_size или есть несколько столбцов MEMORY не поддерживается.

Для такого запроса:

SELECT  id
FROM    tbExam

временная таблица вообще не понадобится.

Есть небольшая разница в том, как InnoDB плагин хранилища (который отвечает за взаимодействие между InnoDB а также MySQL) ведет себя по отношению к TEXT а также VARCHAR поля: VARCHAR поле передается в буфер набора записей по значению, в то время как TEXT поле передается по ссылке.

Внутренне InnoDB магазины TEXT а также VARCHAR Поля аналогичным образом: in-row, если весь столбец помещается на половину страницы, out-of-row, если нет. Разница выше касается только InnoDB / MySQL вопросы взаимодействия.

Если вы не запрашиваете эти поля, то никакой разницы нет.

Другие вопросы по тегам