Этот вопрос основан на двух вещах производительность и размер
Какой DATATYPE лучше использовать TEXT или VARCHAR? Основываясь на производительности, которая будет влиять и которая будет зависеть?
Этот вопрос основан на двух вещах производительность и размер
Какой DATATYPE лучше использовать TEXT или VARCHAR? Основываясь на производительности, которая будет влиять и которая будет зависеть?
Это зависит от того, для чего вы его используете. Я ненавижу давать такой общий ответ, но это правда. Как правило, попробуйте получить тип данных как можно более конкретным. Если ваши строки никогда не превысят некоторую верхнюю границу символов, перейдите к VARCHAR
, потому что она будет немного более эффективной. Если вам нужно больше места, перейдите к TEXT
. Если вы не уверены, сколько места займет ваш текст, вероятно, вы должны пойти с TEXT
; разница в производительности не очень велика, и лучше быть надежной в будущем, чем рисковать, чтобы изменить ее позже, когда ваши требования меняются. Только мои два цента.
В комментариях Пирату указывает, что если MySQL создает временную таблицу для вашего запроса (см. this), столбцы TEXT
будут не должны храниться в памяти и должны быть прочитаны с диска, что намного медленнее. (Источник, в нижней части страницы.) Однако это не имеет значения для большинства запросов.
Если кто-то задавался вопросом, как сравнивается PostgreSQL, я нашел этот тест, который показывает, что CHAR, VARCHAR и TEXT работают одинаково хорошо, Поэтому, если вы используете Postgres, неважно, какой тип вы используете.
Начиная с версии 5.0.3, ограничение VARCHAR увеличивается с 0-256 до 0-65,535 (при условии максимального размера строки (65 535 байт, который используется для всех столбцов) и используемого набора символов.)
Если вы используете ТЕКСТ, который имеет фиксированную длину 64k, даже если вам нужен меньший предел
Так лучше идти с VARCHAR с более высоким пределом, чем TEXT. Если требование превышает 64K, перейдите с MEDIUMTEXT или LONGTEXT соответственно.
Запросы к таблице TEXT всегда были в 3 раза медленнее, чем таблицы VARCHAR (в среднем: 0,10 секунды для таблицы VARCHAR, 0,29 секунды для таблицы TEXT). Разница на 100% повторяемость.
VARCHAR вы можете установить ограничение на количество символов, которое он примет на запись, текст (практически) неограничен... не совсем уверен в производительности, но я бы предположил, что более конкретный тип данных (varchar) будет быстрее.
VARCHAR должен иметь лучшую производительность, так как он имеет ограниченный размер. Фактически, во всех моих опытах с MySQL, операция поиска всегда была быстрее с VARCHAR, чем TEXT. Во всяком случае, это основано на моем опыте. Вы должны проверить документацию, чтобы узнать больше об этом.
Это действительно зависит от вашего типа данных.
Если ваше поле имеет фиксированную длину (например, 32-символьное хеш-значение), используйте CHAR. Это имеет лучшую производительность, поскольку каждая запись занимает одно и то же место в строке.
Стандартный предел для VARCHAR был 255 символов, но я думаю, что он был увеличен сейчас. TEXT довольно длинный и обычно используется только для большого контента, такого как целая запись в блоге, и комментарии, если вы не хотите ограничения.
В отношении размера нет (или очень мало) разницы между VARCHAR и TEXT, поскольку они просто хранят то, что им нужно. Поля CHAR всегда будут занимать их выделенную длину.
По производительности, VARCHAR обычно быстрее. VARCHAR также можно индексировать, что приводит к более быстрому поиску.
MySQL будет внутренне конвертировать TEXT в varchar при создании временных таблиц. Поэтому лучше использовать VARCHAR, если это возможно. Есть несколько незначительных ошибок, связанных с столбцом TEXT, например...
В соответствии с моим мнением VARCHAR - лучший вариант, когда вы знаете длину символов. Это также уменьшит выделение памяти памяти и проблемы с памятью. TEXT будет потреблять 255, где VARCHAR будет потреблять, так как u дает значения для него.
В соответствии с производительностью VARCHAR также быстрее, чем TEXT.
Существует тонкая разница в тексте и 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