Какой 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