Какой тип данных лучше использовать TEXT или VARCHAR? - PullRequest
59 голосов
/ 30 июля 2009

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

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

Ответы [ 9 ]

97 голосов
/ 30 июля 2009

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


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

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

7 голосов
/ 09 ноября 2012

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

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

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

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

6 голосов
/ 11 июня 2014

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

Бенчмарк от http://forums.mysql.com/read.php?24,105964,105964

3 голосов
/ 30 июля 2009

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

3 голосов
/ 30 июля 2009

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

2 голосов
/ 18 июля 2013

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

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

2 голосов
/ 30 июля 2009

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

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

2 голосов
/ 30 июля 2009

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

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

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

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

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

0 голосов
/ 07 октября 2013

Существует небольшая разница в тексте и 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...