Какой DATATYPE лучше использовать TEXT или VARCHAR?

Этот вопрос основан на двух вещах производительность и размер

Какой DATATYPE лучше использовать TEXT или VARCHAR? Основываясь на производительности, которая будет влиять и которая будет зависеть?

Ответ 1

Это зависит от того, для чего вы его используете. Я ненавижу давать такой общий ответ, но это правда. Как правило, попробуйте получить тип данных как можно более конкретным. Если ваши строки никогда не превысят некоторую верхнюю границу символов, перейдите к VARCHAR, потому что она будет немного более эффективной. Если вам нужно больше места, перейдите к TEXT. Если вы не уверены, сколько места займет ваш текст, вероятно, вы должны пойти с TEXT; разница в производительности не очень велика, и лучше быть надежной в будущем, чем рисковать, чтобы изменить ее позже, когда ваши требования меняются. Только мои два цента.


В комментариях Пирату указывает, что если MySQL создает временную таблицу для вашего запроса (см. this), столбцы TEXT будут не должны храниться в памяти и должны быть прочитаны с диска, что намного медленнее. (Источник, в нижней части страницы.) Однако это не имеет значения для большинства запросов.

Если кто-то задавался вопросом, как сравнивается PostgreSQL, я нашел этот тест, который показывает, что CHAR, VARCHAR и TEXT работают одинаково хорошо, Поэтому, если вы используете Postgres, неважно, какой тип вы используете.

Ответ 2

Начиная с версии 5.0.3, ограничение VARCHAR увеличивается с 0-256 до 0-65,535 (при условии максимального размера строки (65 535 байт, который используется для всех столбцов) и используемого набора символов.)

Ref. http://dev.mysql.com/doc/refman/5.0/en/char.html

Если вы используете ТЕКСТ, который имеет фиксированную длину 64k, даже если вам нужен меньший предел

Так лучше идти с VARCHAR с более высоким пределом, чем TEXT. Если требование превышает 64K, перейдите с MEDIUMTEXT или LONGTEXT соответственно.

Ответ 3

Запросы к таблице TEXT всегда были в 3 раза медленнее, чем таблицы VARCHAR (в среднем: 0,10 секунды для таблицы VARCHAR, 0,29 секунды для таблицы TEXT). Разница на 100% повторяемость.

Тест от http://forums.mysql.com/read.php?24,105964,105964

Ответ 4

VARCHAR вы можете установить ограничение на количество символов, которое он примет на запись, текст (практически) неограничен... не совсем уверен в производительности, но я бы предположил, что более конкретный тип данных (varchar) будет быстрее.

Ответ 5

VARCHAR должен иметь лучшую производительность, так как он имеет ограниченный размер. Фактически, во всех моих опытах с MySQL, операция поиска всегда была быстрее с VARCHAR, чем TEXT. Во всяком случае, это основано на моем опыте. Вы должны проверить документацию, чтобы узнать больше об этом.

Ответ 6

Это действительно зависит от вашего типа данных.

Если ваше поле имеет фиксированную длину (например, 32-символьное хеш-значение), используйте CHAR. Это имеет лучшую производительность, поскольку каждая запись занимает одно и то же место в строке.

Стандартный предел для VARCHAR был 255 символов, но я думаю, что он был увеличен сейчас. TEXT довольно длинный и обычно используется только для большого контента, такого как целая запись в блоге, и комментарии, если вы не хотите ограничения.

В отношении размера нет (или очень мало) разницы между VARCHAR и TEXT, поскольку они просто хранят то, что им нужно. Поля CHAR всегда будут занимать их выделенную длину.

По производительности, VARCHAR обычно быстрее. VARCHAR также можно индексировать, что приводит к более быстрому поиску.

Ответ 7

MySQL будет внутренне конвертировать TEXT в varchar при создании временных таблиц. Поэтому лучше использовать VARCHAR, если это возможно. Есть несколько незначительных ошибок, связанных с столбцом TEXT, например...

http://bugs.mysql.com/bug.php?id=36676

Ответ 8

В соответствии с моим мнением VARCHAR - лучший вариант, когда вы знаете длину символов. Это также уменьшит выделение памяти памяти и проблемы с памятью. TEXT будет потреблять 255, где VARCHAR будет потреблять, так как u дает значения для него.

В соответствии с производительностью VARCHAR также быстрее, чем TEXT.

Ответ 9

Существует тонкая разница в тексте и varchar. У меня есть таблица, как показано:

CREATE TABLE `test`.`tbl`(
  `kee` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `txt` TEXT(100),
  `vrchr` VARCHAR(100),
  PRIMARY KEY (`kee`)
);

Я вставляю строку:

 INSERT INTO `tbl`
            (`txt`,
             `vrchr`)
VALUES ('1        
         2
         3',
        '1
         2
         3');

Столбец txt имеет значение:
1
2
3
и столбец vrchr имеет значение:
1