Эффективность SQL-сервера Datetime vs Int

Для вас создатели базы данных / гуру производительности там.

Если у вас есть база данных, предназначенная для отслеживания финансовых данных за периоды финансового года, лучше / более эффективна / более ясна, чтобы выполнять поиск типа типа daterange, например PaymentDate между X и Y, или лучше хранить таблицу на основе int-key с определенные в нем периоды финансового года и пометьте таблицу платежей датой платежа и этим ключом, поэтому в предложении where указано FiscalPeriodID = X?

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

Я ежедневно разбираюсь со складами в миллионах строк, и мы находим, что клавиши умных дат – это путь. Это в формате YYYYMMDD. Чтобы найти весь 2008 год, вы бы сделали:

select * from gl where postdate between 20080101 and 20081231 

С индексированным столбцом это феноменально быстро, даже через один миллиард строк. Это также указывает на таблицу дат, поэтому мы можем использовать в качестве названия день или месяц, или любую другую информацию о датах, которые мы имеем с этим соединением.

Конечно, эти склады обычно создаются для поддержки кубов SSAS (баз данных OLAP), и поэтому таблица даты становится нашим измерением даты. Гораздо быстрее присоединиться к int, чем к дате.

Также рассмотрите, что представляет собой действительную часть даты фактического времени datetime или smalldatetime … 4-байтовое целое число, представляющее количество дней с 1 января 1900 года.

Это может быть передано фактическому дате времени неявно, очень быстро (поскольку это то же самое значение, что и первые четыре байта 8-байтового значения DateTime)

вы также можете использовать его в предложениях Where против фактических значений даты и времени, поскольку механизм SQL Server неявно преобразовывает один в другой и обратно.

Кроме того, каждое возможное значение 32-битного (4-байтового) целого числа является допустимым дат-временем (Midnight) для внутреннего типа данных Datetime SQL Server

То, что вы делаете со значительно большими финансовыми наборами данных, – это «кубы данных».

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

Так что это не имеет значения. Храните его, однако, и создайте историческую базу данных, которая будет более эффективной для долгосрочной отчетности.

Я бы пошел с датой, хранящейся непосредственно против записи.

Если вы можете использовать smalldatetime, то он будет иметь тот же размер, что и integer, – как 4 байта. И под капотом datetime datatypes являются целыми числами.

Первые 2 байта smalldatetime – это что-то вроде количества прошедших дней, так как может быть 1/1/1900, а второе 2 байта – это количество секунд, прошедших с полуночи. (Это может быть не совсем точно, но вы понимаете суть.) Таким образом, эти типы данных очень эффективны.

Я думаю, что предложение where, выполненное против поля smalldatetime, будет прекрасным.

  • Эффективное обновление таблицы MySQL с SQL Server
  • Показатель SQL count (*)
  • Максимальные возможности MySQL
  • Таблица Sql Server In-memory, реализованная с помощью Redis
  • простой выбор занимает огромное время на столе
  • Самый быстрый способ изменить тип данных столбца в SQL Server
  • Каковы основные различия между NOT IN и <> ALL?
  • Оптимальная настройка RAID для SQL-сервера
  • Производительность SQL с использованием JOIN вместо IN CLAUSE
  • Влияние производительности на SQL Collation
  • Могут ли числовые поля быть целью SQL-инъекций?
  • Interesting Posts

    Измените строку подключения приложения формы Windows C # на другой компьютер

    Как называется SQL SP, который находит текстовую строку?

    Параметры хранимой процедуры mysql, похоже, не работают с «@» (знак «В»)

    Запрос сервера SQl для группы серверов

    вставка только даты в столбец в sql-сервере

    Преобразование в float ограничивает возвращаемый результат только 7 символами

    Сохраненная процедура открытия и чтения текстового файла

    MS SQLServer Management Studio 2012; Ошибка при запуске запросов после установки SP 2

    Составной ключ sql server 2008

    Как SQL-запросы выполняются в SQL Server Management Studio с GO и без оператора GO?

    Перемещение нескольких строк в одну строку с использованием 2 таблиц

    Почему Linq-запрос устанавливает мои параметры Arithabort в false?

    Преобразовать строку поиска в полнотекстовую совместимую строку поиска?

    Будет ли SQL Server использовать объединение Merge с индексом без кластеризации или только для кластеризованного индекса Merge join?

    Проблема с присоединением к себе

    Давайте будем гением компьютера.