У меня есть вопрос относительно типов данных, доступных на языке SQL для хранения данных в самой базе данных. Поскольку я имею дело с довольно большой базой данных, которая имеет тенденцию увеличиваться более чем на 150 ГБ данных, мне нужно уделять пристальное внимание и экономить каждый бит места на жестком диске сервера, чтобы база данных не занимала все драгоценное пространство. Итак, мой вопрос заключается в следующем:
Какой тип данных лучше всего подходит для хранения строки длиной 80-200 символов в базе данных?
Я знаю, например,
varchar(200)
иnvarchar(200)
, гдеnvarchar
поддерживает символ Юникода. Какой из них будет занимать меньше места в базе данных, или если есть третий тип данных, о котором я не знаю, и который я мог бы использовать для хранения данных (если я точно знаю, что строка, которую я бы сохранил, просто комбинация цифр и букв, без спецсимволов)Существуют ли какие-либо другие методы, которые я мог бы использовать для экономии места в базе данных, чтобы она не расширялась быстро?
Может ли кто-нибудь помочь мне с этим?
P.S. Ребят, у меня тоже 4 вопрос:
Если, например, у меня есть тип данных
nvarchar(max)
, который находится в таблице, а введенная запись занимает всего 100 символов, сколько данных зарезервировано для такого типа записи?Допустим, у меня есть идентификатор, который имеет следующую форму: 191697193441... Было бы разумнее хранить этот номер как varchar(200) или bigint?
VARCHAR
занимает 1 байт на символ -NVARCHAR
требуется 2 байта на символ. Столбецnvarchar(max)
, содержащий 100 символов, будет использовать 200 байтов (плюс небольшие накладные расходы на строку). - person marc_s   schedule 13.02.2018nvarchar
иvarchar
используют 2 и 1 байт для каждого символа соответственно. Если вашему столбцу не нужно хранить символы Юникода, тогдаvarchar
будет правильным выбором, так как он вдвое меньше. Также важно создать столбец с соответствующим типом данных. Если у вас есть столбец, в котором всегда будет до 10 символов, но вы объявляете его какvarchar(100)
, вы потратили 90 символов впустую. Точно так же, если у вас есть поле, в котором будут храниться только числа от 1 до 100, используйтеtinyint
. - person Larnu   schedule 13.02.2018XML
, так как этот тип использует оптимизированный механизм хранения. В общем: если что-то не на самом деле является строкой (числом, датой), не сохраняйте это как строку — используйте наиболее подходящие типы данных (они обычно занимают меньше памяти, чем просто струны) - person marc_s   schedule 13.02.2018(n)varchar
не будут тратить впустую место — они хранят только то, что вы действительно в них вставляете. Если у вас естьnvarchar(max)
(который содержит до 2 ГБ данных!), но вы помещаете в него 100 символов, он использует 200 байтов (+ накладные расходы). Если вы храните в нем только 5 символов, он использует 10 байт (+ накладные расходы) - person marc_s   schedule 13.02.2018nvarchar
только, если вам действительно нужна поддержка таких вещей, как Unicode-алфавиты — иврит, кириллица, арабский, дальневосточный и т. д. — в противном случае соглашайтесь наvarchar
- person marc_s   schedule 13.02.2018