Базы данных:Являются ли поля «TEXT» менее эффективными, чем «varchar»?

StackOverflow https://stackoverflow.com/questions/207867

  •  03-07-2019
  •  | 
  •  

Вопрос

Является ли использование ТЕКСТА менее эффективным, чем использование varchar в базе данных SQL?

Если да, то почему?

Если нет, то почему бы вам не всегда использовать ТЕКСТ?

Я не ориентируюсь здесь на конкретную базу данных, но Oracle, вероятно, является наиболее актуальной, хотя я пока тестирую MySQL в рамках проверки концепции.

Это было полезно?

Решение

От Майкрософт здесь

Типы данных NTEXT, текста и изображения будут удалены в будущей версии Microsoft SQL Server.Избегайте использования этих типов данных в новой разработке и планируйте изменение приложений, которые в настоящее время их используют.Вместо этого используйте nvarchar (max), varchar (max) и varbinary (max).

Когда вы используете varchar(max) над текстом, вы можете использовать его в WHERE пункт, потому что они работают так же, как и их меньшие аналоги, varchar,nvarchar and varbinary.Ниже приведен небольшой список того, что следует использовать, а не то, что должно было использоваться:

  • Используйте varchar(max) вместо текста
  • Используйте nvarchar(max) вместо ntext
  • Используйте varbinary(max) вместо изображения

Другие советы

В документации PostgreSQL говорится:

Кончик:Между этими тремя типами нет различий в производительности, за исключением увеличенного размера хранилища при использовании типа с заполненными пробелами и нескольких дополнительных циклов для проверки длины при сохранении в столбце с ограниченной длиной.Хотя символ(n) имеет преимущества в производительности в некоторых других системах баз данных, в PostgreSQL он не имеет таких преимуществ.В большинстве ситуаций вместо этого следует использовать текст или символы.

Краткий ответ:Да, они менее эффективны.

Более длинный и запутанный ответ:

Да, они, вероятно, менее эффективны.Это зависит от того, какую СУБД вы используете, размера вашей таблицы и т. д. и т. п.Поля TEXT имеют переменную ширину, и поэтому СУБД приходится выполнять больше работы при попытке найти записи.Насколько это влияет на вашу производительность, прямо пропорционально тому, насколько эффективна ваша СУБД в целом, сколько данных она хранит о строках таблицы и оптимизирует ли она таблицы фиксированной длины.

Я знаю, что MySQL работает быстрее со строками таблицы фиксированной длины, но вы должны сказать ему, что сначала таблицу можно рассматривать как таблицу фиксированной длины.У меня нет практического опыта работы с другими СУБД, чтобы иметь возможность соотносить фактические числа.Но в таблицах с большим количеством записей (читается миллион и более) это может иметь существенное значение.Однако таблицы меньшего размера практически не будут иметь никакого практического значения.

Вам нужно уточнить, о какой базе данных вы говорите.Я верю, что, по крайней мере, в некоторых базах данных ТЕКСТ хранится как CLOB отдельно от самой таблицы (которая содержит только ссылку).Это приводит к тому, что таблица становится меньше (хорошо), но при этом требуется дополнительный поиск и, возможно, промахивается кэш при выборке (плохо).

Вероятно, это также связано с индексированием и запросами, но, опять же, это будет зависеть от конкретной СУБД, которую вы используете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top