Какая метрика размера прикреплена к VARCHAR? - PullRequest
2 голосов
/ 15 февраля 2011

Я использую VARCHAR во всем приложении и обнаружил что-то особенно запутанное ... Почему мне нужно определять столбцы SQL VARCHAR с длиной, например VARCHAR (50) или VARCHAR (1000)?Является ли единственной целью то, что это ограничение длины позволяет мне определять предпочтительную максимальную длину строки?Есть ли разница в производительности или нет между VARCHAR (50) и VARCHAR (1000)?

Ответы [ 2 ]

2 голосов
/ 15 февраля 2011

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

Это потому, что индексы должны быть безумно эффективными, и вы не хотите в этом случае возиться с полями переменной длины, поскольку это, вероятно, замедлит вас.

Даже в области данных базы данных вы можете обнаружить, что она допускает самый большой размер. Я видел предложения, которые просто хранят указатель в строке на кучу на диске, но это означает, что два чтения диска на строку, и я не вижу, чтобы это был очень хороший вариант для огромной производительности.

Размеры ваших столбцов будут влиять на производительность, например, сколько записей можно прочитать за один раз, сколько может поместиться в узле индекса n-арного дерева и т. Д.

0 голосов
/ 15 февраля 2011
  • SQLite: ограничения на размер полностью игнорируются.
  • PostgreSQL: VARCHAR(N) по существу эквивалентно TEXT CHECK (LENGTH(x) <= N).Объявлять максимальный размер не дает никакого преимущества в производительности.
  • MySQL : определяет, сохраняется ли длина строки в виде одного байта или двух байтов.
  • Oracle: более высокие ограничения размераимеет снижение производительности .
  • MS SQL Server: столбцы VARCHAR, длина которых превышает 900 байт, не могут быть проиндексированы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...