Дата SQL Server против smalldatetime
У меня есть куча таблиц, которые объединяют данные на разных уровнях: ежеквартально, ежечасно, ежедневно и ежемесячно. Кроме того, есть базовая таблица, в которой также содержатся "необработанные" данные, в этом есть несколько дополнительных столбцов. Все сводные таблицы имеют одинаковые столбцы.
В базовых, ежеквартальных и ежечасных таблицах используется столбец типа smalldatetime
для отметки времени. Этот столбец также будет доступен в часовых и ежедневных таблицах, но, конечно, мне не понадобится время.
Для простоты я также хочу использовать тип данных smalldatetime, но, может быть, лучше для использования использовать тип данных даты для столбца?
Есть ли действительно большая разница между типами, когда дело доходит до производительности?
Ответы
Ответ 1
Обычно рекомендуется использовать наименьший тип данных, который вам нужен. Вы не должны использовать varchar (max) или даже varchar (10) для хранения аббревиатуры состояния 2 символа.
В том же смысле, если вам просто нужна дата (например, 4/11/2001), используйте тип Date, а не тип DateTime.
Хотя это может и не быть огромным выигрышем в производительности (DateTime на 5 байт больше, чем Date.) Он может начинаться с добавления, если у вас несколько полей и/или несколько строк.
Ответ 2
Различные типы данных имеют различный размер, который влияет на размер данных/индексов, что более важно, чем производительность запросов (Стоимость ввода-вывода).
С другой стороны, преобразование между типами данных может быть дорогостоящим. Более того, неявное преобразование между различными типами данных может быть неправильным/неожиданным.
Я бы сохранил один тип даты (4 байта smalldatetime
в этом случае), если вы присоединяетесь между таблицами в столбцах даты или не сохраняете наименьший возможный тип даты - smalldatetime
для хранения часов и кварталов и date
для чистых дат.
Ответ 3
К сожалению, в случае smalldatetime
для меня возникла проблема при использовании утилиты bcp (bulk copy) для операций экспорта/импорта. Импорт BCP не похож на поля smalldatetime
(по крайней мере, поскольку они экспортируются BCP). Версию уже в SQL Server 2008 и используя "родной" формат в bcp. Поэтому я буду использовать datetime
для моей работы в будущем, потому что мне нравится использовать bcp для перемещения данных.