Для эффективной работы MSSQL сервера важно правильно выбрать типы полей, что скажется как на производительности так и на экономном использовании дискового пространства, особенно при работе с очень большими объемами данных.
Это Ололоша, и сегодня он решил создать таблицу в MS SQL и столкнулся с некоторыми трудностями.
Сегодня он создал таблицу с учениками своего класса, Primary Key типа Tinyint и поле с именем типа text. Что ж, поздравим такого умного мальчика, но ему нужно внести пару небольших изменений.
Типы данных для хранения текста
`text`
Устаревший тип данных и используется только для обратной совместимости. Ни в коем случае не стоит его использовать в новых таблицах. Вместо него стоит использовать varchar(max)
`char(n)`
Тип данных с фиксированной длиной. Требует внимательности в обращении, поскольку, он занимает в любом слуае все выделенное ему место. Если в поле размером 10 символов записать 1 символ, то занято будет все равно 10 а все остальное будет дополнено пробелами.
Удобно, например, хранить какие-нибудь статусы типа "n", ну, или любые другие данные фиксированной длины.
`varchar(n)`, `nvarchar(n)`, `varchar(max)`, `nvarchar(max)`
Тип данных с переменной длиной текстовой строки. В отличие от типа поля char, данные в поле типа varchar не заполняются пробелами до общей длины поля, если фактическая длина строки меньше.
varchar - хранение латинских букв и букв выбранной кодовой страницы при настройке сервера базы данных или создании базы данных. То есть, на какой язык настроена БД, символы этого языка будут занимать 1 байт и английские символы аналогично. Максимальная длина - 8000 символов.
Длина max указывается, если поле должно хранить длинные тексты до 2 гигабайт. Тип поля varchar(max) следует использовать в качестве альтернативы устаревшему типу text.
nvarchar - хранение данных на других языках. На каждый символ тратится 2 байта данных. Максимальная длина - 4000 символов. Также для длинных текстов может использоваться тип поля nvarchar(max). Например, если захотите хранить что-то на иврите ну или клингонском.
Целочисленные типы
Bigint
Это тип данных в различных системах управления базами данных (СУБД), который используется для хранения целых чисел большого диапазона. Он обычно представляет собой целые числа от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 в двоичной системе.
Вот некоторые особенности BIGINT:
Диапазон значений: BIGINT может хранить очень большие целые числа, что делает его удобным для использования в случаях, когда требуется работа с очень большими числами или идентификаторами сущностей, где требуется широкий диапазон значений.
Использование памяти: Этот тип данных занимает больше памяти по сравнению с типами данных, хранящими меньший диапазон значений, например, INT. Это следует учитывать при проектировании схемы базы данных.
Int
это сокращение от "integer" (целое число) и является одним из наиболее распространенных типов данных для хранения целых чисел во многих языках программирования и системах управления базами данных (СУБД).
Основные особенности типа данных int:
Диапазон значений: int обычно занимает 32 бита (4 байта) памяти и может хранить целые числа от -2,147,483,648 до 2,147,483,647 включительно (в двоичной системе).
Зависимость от платформы: Размер int может варьироваться в зависимости от платформы и используемой системы. Например, в некоторых платформах int может быть 16-битным или 64-битным.
Smallint
Это тип данных, используемый во многих системах управления базами данных (СУБД), предназначенный для хранения целых чисел с небольшим диапазоном значений.
Основные характеристики smallint:
Диапазон значений: smallint обычно занимает 16 бит (2 байта) памяти и может хранить целые числа от -32,768 до 32,767 включительно (в двоичной системе).
Использование в СУБД: smallint часто используется для экономии памяти, когда требуется хранение целых чисел, но ожидается, что значения будут оставаться в относительно небольшом диапазоне. Это уменьшает использование памяти в сравнении с типами данных, такими как int или bigint.
Экономия ресурсов: Использование smallint может быть полезным, если вам необходимо хранить целые числа, но вы знаете, что значения не выйдут за пределы диапазона значений, поддерживаемого этим типом данных.
Ограничения и пределы: При использовании smallint важно учитывать его пределы и ограничения, чтобы избежать переполнения или ошибок в случае, если значения выйдут за пределы допустимого диапазона.
Тип данных smallint широко используется в базах данных для оптимизации использования памяти и хранения относительно небольших целых чисел. Он предоставляет компромисс между размером хранимых данных и ожидаемым диапазоном значений.
Tinyint
Это тип данных, используемый во многих системах управления базами данных (СУБД) для хранения целых чисел с очень небольшим диапазоном значений.
Основные характеристики tinyint:
Диапазон значений: tinyint обычно занимает 8 бит (1 байт) памяти и может хранить целые числа от 0 до 255 включительно (в двоичной системе). Если tinyint используется со знаком, то диапазон будет от -128 до 127.
Экономия памяти: Использование tinyint полезно, когда необходимо хранить целые числа с очень ограниченным диапазоном значений и при этом нужно экономить память.
Ограничения: Важно помнить, что из-за очень маленького диапазона значений tinyint может быть не подходящим для случаев, когда необходимо хранить большие целые числа.
Использование в СУБД: tinyint может использоваться для хранения данных, таких как флаги, статусы, или в случаях, когда необходимо хранить значения с ограниченным диапазоном.
Decimal, Numeric
Эти два типа данных полностью идентичны. Они предназначены для хранения чисел с фиксированной точкой и могут использоваться, например, для денежных данных.
Этот тип данных позволяет хранить как целые числа (в скобках указывается точность числа, или количество десятичных чисел), так и числа с фиксированным количеством знаков после точки (указывается после запятой). Первое число (точность) в скобках всегда показывает общее количество десятичных чисел в поле, включая правую часть после точки.
Таким образом, поле с типом numeric(5,2) позволяет хранить числа в диапазоне от -999.99 до 999.99.
Следует ответственно выбирать точность для этих типов полей. Зависимость количества выделенных байт под хранение значений в зависимости от выбранной точности:
numeric(18, 0)
p = 18, s = 0
Если p = 18 ≤ 9, то размер = (18 / 2) + 1 = 10 байт
numeric(10, 2)
p = 10, s = 2
Если p = 10 ≤ 9, то размер = (10 / 2) + 1 = 6 байт
numeric(30, 5)
p = 30, s = 5
Если p = 30 > 9, то размер = (30 / 2) + 2 = 17 байт
Для хранения чисел без дробной части лучше использовать целочисленные типы.
Float, Real
Типы полей для хранения чисел с плавающей точкой.
Не рекомендуется использовать эти типы полей для хранения десятичных дробей, особенно с большим количеством цифр после точки. Эти типы данных относятся к приблизительным типам. Например, если записать в поле типа real число 123.456789, то фактически будет сохранено число 123.45679.
Источник материала - статья одного хорошего и очень умного человека.