При разработке таблицы поиска (enum) в SqlServer 2005, если вы знаете, что количество записей никогда не будет очень высоким, следует ли использовать tinyint вместо int? Меня больше всего беспокоит производительность, особенно эффективность индексов.
Скажем, у вас есть эти репрезентативные таблицы:
Person
------
PersonId int (PK)
PersonTypeId tinyint (FK to PersonTypes)
и
PersonTypes
-----------
PersonTypeId tinyint
PersonTypeName varchar(50)
Очевидными факторами являются размер данных и сложность кодирования. Когда мы получаем 100 миллионов строк в таблице человек, мы сохраняем 300 миллионов меньше байтов с tinyint, а не int, плюс пространство, занятое нашими индексами. Не огромный объем данных, но значительный, если проектное решение применяется к десяткам больших таблиц. Конечно, проблема с кодированием исходит из всех этих проблем с литьем в коде ASP.NET С#/VB.
Если мы отложим эти два вопроса, что еще входит в игру? Будет ли запрос намного более эффективным из-за уменьшения размера страниц индекса? Или есть какие-то дополнения, которые случаются, которые просто отрицают преимущества? Любые другие ошибки?
Я всегда просто использовал ints лично, но я рассматриваю tinyint для предстоящего процесса редизайна/миграции на некоторых огромных таблицах, поэтому я хотел бы получить совет.
[изменить]
После того, как вы экспериментировали с этим, проблемы с кодированием, которые я ожидал, оказались нецелевыми. Переход от int к tinyint не привел к какому-либо кастингу.