Есть ли преимущество в настройке полей tinyint, когда я знаю, что значение не будет превышать 255?

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

Вопрос

Должен ли я выбрать наименьший возможный тип данных, или, например, если я сохраняю значение 1, не имеет значения, каков тип данных col, и значение будет занимать тот же размер памяти?

Вопрос также в том, потому что мне всегда придется конвертировать его и играть в приложении.


Обновить

Я думаю, что varchar (1) и varchar (50) имеют одинаковый размер памяти, если значение равно "a", я думал, что это то же самое с int и tinyint, согласно ответам, которые я понимаю, это не так, не так ли?

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

Решение

Всегда выбирайте как можно меньший тип данных.SQL не может угадать, каким вы хотите видеть максимальное значение, но он может оптимизировать хранилище и производительность, как только вы укажете ему тип данных.


Чтобы ответить на ваше обновление:

varchar занимает ровно столько места, сколько вы используете, и поэтому вы правы, когда говорите, что символ "a" займет 1 байт (в латинской кодировке), независимо от того, насколько большой a varchar поле, которое вы выберете.Это не относится к любому другому типу полей в SQL.

Однако вы, скорее всего, пожертвуете эффективностью ради пространства, если сделаете все полем varchar.Если все представляет собой поле фиксированного размера, то SQL может выполнить простое умножение в постоянное время, чтобы найти ваше значение (например, массив).Если у вас там есть поля varchar, то единственный способ узнать, где хранятся ваши данные, - это просмотреть все предыдущие поля (например, связанный список).

Если вы начинаете работать с SQL, я советую просто держаться подальше от полей varchar, если только вы не ожидаете, что у вас будут поля, которые иногда содержат очень небольшое количество текста, а иногда и очень большое количество текста (например, записи в блоге).Нужен опыт, чтобы знать, когда использовать поля переменной длины для достижения наилучшего эффекта, и даже я в большинстве случаев этого не знаю.

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

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

Одна страница в Sql Server составляет 8 кб.Использование крошечных целых чисел вместо целых чисел позволит вам поместить больше данных на одну страницу, но вы должны подумать, стоит ли это того.Если вы собираетесь получать тысячи просмотров в минуту, то да.Если это хобби-проект или что-то, что когда-либо увидят всего несколько десятков пользователей, то это не имеет значения.

Преимущество есть, но может быть незначительным, если у вас нет большого количества строк и вы не выполняете много операций.Это приведет к повышению производительности и уменьшению объема памяти.

Традиционно каждый бит, сохраненный в размере страницы, будет означать небольшое улучшение скорости:более узкие строки означают больше строк на странице, что означает меньшее потребление памяти и меньшее количество запросов ввода-вывода, что приводит к повышению скорости.Однако с SQL Server 2008 Сжатие страницы все начинает расплываться.Алгоритм сжатия может сжимать 4-байтовые целые числа со значениями меньше 255 даже меньше, чем на один байт.

Сжатие строк алгоритмы будут хранить 4 байта int в одном байте для значений меньше 127 (int имеет знак), 2 байта для значений меньше 32768 и так далее, и тому подобное.

Однако, учитывая, что хорошие функции сжатия доступны только на серверах Enterprise Edition, имеет смысл сохранить привычку использовать как можно меньший тип данных.

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