Каковы реальные последствия производительности использования текста вместо типов varchar в MySQL? - PullRequest
4 голосов
/ 07 января 2010

Есть ли у кого-нибудь какие-либо сравнения, личный опыт или рекомендации, когда использовать тип text вместо большого varchar в MySQL?

Хотя большинство записей в моей базе данных будет содержать менее 1000 символов, некоторые могут занимать до 4000 символов или более. Какова предельная длина varchar, что делает text лучшим вариантом?

Мне не нужно индексировать эти поля.

Ответы [ 2 ]

5 голосов
/ 07 января 2010

У меня нет личного опыта, но у этого парня есть:

VARCHAR vs. TEXT - некоторые показатели производительности

Быстрый ответ: varchar был немного быстрее.

Редактировать - нет, это не так. Он индексировал их по-другому - у него был полный индекс по varchar (255 символов), но по тексту был индекс с префиксом 255 символов. Когда он удалил это, они выполнили более или менее то же самое.

Позже в теме есть интересная новость:

Когда таблица tmp необходима для SELECT, первый выбор заключается в использовании ПАМЯТЬ, которая будет только RAM, следовательно наверное заметно быстрее. (Второй выбор - MyISAM.) Однако ТЕКСТ и BLOB не допускаются в ПАМЯТЬ, поэтому не могу использовать это. (Есть и другие причины почему это может пропустить ПАМЯТЬ.)

Редактировать 2 - некоторая более актуальная информация, на этот раз сравнивая, как различные индексы работают с различными типами.

MyISAM помещает ТЕКСТ и BLOB «в строку». Если вы ищете таблицу (диапазон сканирования / таблица сканирования), вы переступаете коровье поле - дорого за диск I / O. То есть существование встроенная капля вредит производительности в этом случай.

InnoDB помещает только 767 байтов ТЕКСТА или BLOB-инлайн, остальное уходит в какой-то другой блок. Это компромисс это иногда помогает, иногда болит производительность.

Что-то еще (Мария? Сокол? InnoDB плагин?) полностью помещает тексты и BLOB в другом месте. Это сделало бы заметная разница в производительности по сравнению с VARCHAR. Иногда Текст будет быстрее (например, сканирование диапазона который не нуждается в блобе); иногда VARCHAR будет быстрее (например, если вам нужно посмотреть на это и / или вернуть его).

1 голос
/ 07 января 2010

Конечно, лучший способ узнать это - запустить некоторые тесты самостоятельно с вашим реальным набором данных или, по крайней мере, с имитированным эквивалентом. Просто напишите несколько скриптов, чтобы заполнить данные и выполнить выбор. Протестируйте с помощью varchar разных размеров, затем отправьте текст и измерите время и общее использование системы (процессор / нагрузка, память, дисковый ввод-вывод).

Если у вас будет достаточно нагрузки, чтобы это имело значение, то вам все равно следует провести автоматические тесты.

...