Подтвердить что ты не робот

Дата SQL Server против smalldatetime

У меня есть куча таблиц, которые объединяют данные на разных уровнях: ежеквартально, ежечасно, ежедневно и ежемесячно. Кроме того, есть базовая таблица, в которой также содержатся "необработанные" данные, в этом есть несколько дополнительных столбцов. Все сводные таблицы имеют одинаковые столбцы.

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

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

Есть ли действительно большая разница между типами, когда дело доходит до производительности?

4b9b3361

Ответ 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 для перемещения данных.