SQL: Эффективно ли использовать tinyint вместо Integer, если мое максимальное значение равно 255? - PullRequest
8 голосов
/ 07 июля 2010

Предположим, я хочу сохранить количество строк сетки данных, которое может быть макс.24 потому что каждая строка равна 1 часу.

Чтобы сохранить индекс строки в базе данных, было бы достаточно поля tinyint.Но вспоминаю немного, что базы данных оптимизированы для целых чисел?!

Так стоит ли использовать tinyint?

Ответы [ 4 ]

9 голосов
/ 07 июля 2010

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

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

3 голосов
/ 07 июля 2010

Как правило, чем меньше места, тем лучше, поскольку чем больше строк может уместиться на одной странице ввода-вывода 8k на диске (или в памяти), тем меньше операций ввода-вывода потребуется для поиска и / или извлечения данных ... Это Это особенно важно для столбцов, используемых в индексах. Однако, если ваша машина, например, является 32-битной машиной и работает под управлением 32-битной ОС, то наименьший фрагмент памяти, к которому можно обращаться независимо, составляет 32 бита, поэтому, если это единственный столбец в схеме таблицы, который меньше чем 32 бита, то это не имеет значения, потому что каждая полная строка данных должна начинаться и заканчиваться на 32-битной границе, поэтому каждая строка должна быть кратна 32-битной ширине.

То есть, если ваш стол был

MyTable (ColA tinyint, ColB Int, ColC DateTime) Тогда каждая строка будет занимать 16 байтов (128 бит), а 24 бита будут потрачены впустую.

С другой стороны, если у вас есть 4 столбца, которые могут быть tinyInts, то во всех случаях используйте их в качестве SQL-сервера, который поместит четыре из них в одно 32-разрядное хранилище на диске (независимо от того, в каком порядке вы их объявляете).

Те же принципы применимы к 64-битному SQL Server, работающему на 64-битной ОС / CPUbB

2 голосов
/ 07 июля 2010

Tinyint - это целое число, и оно будет быстрее, чем INT, поскольку TINYINT занимает меньше байтов (1 байт), чем тип данных INT (4 байта).

Справка:

2 голосов
/ 07 июля 2010

TINYINT

меньше места - это хорошо.

...