nvarchar или varchar или дата в объединениях SQL Server

У меня есть проект управления, разработанный в Интернете с использованием SQL Server 2008 R2 и приложения Windows с использованием SQL Server CE 4.0.

Оба используют практически одинаковую структуру базы данных. У меня есть таблица с тарифами:

TABLE [fees] 
(
    [feeid] bigint NOT NULL IDENTITY(1,1),
    [acno] int NULL DEFAULT 0,
    [billingmonth] nvarchar(10) NULL,
    [oldbal] numeric(18,2) NULL DEFAULT 0,
    [duedtamt] numeric(18,2) NULL DEFAULT 0,
    [afterdtamt] numeric(18,2) NULL DEFAULT 0, 
    [bal] numeric(18,2) NULL DEFAULT 0,
    [depamt] numeric(18,2) NULL DEFAULT 0,
    [totdpo] numeric(18,2) NULL DEFAULT 0,
    [depdt] datetime NULL
)

billingmonth всегда будет использовать формат MMM-yyyy например. Jan-2018

BillingMonth использует различные соединения (внутреннее и левое внешнее соединение) в других таблицах.

Как повысить производительность объединений с BillingMonth?, нужно ли мне:

  • Преобразуйте nvarchar в varchar (так как он всегда будет хранить месяц в SQL2008R2)
  • Преобразуйте nvarchar в datetime (как первый день месяца 01-MMM-yyyy в SQL Server CE и SQL Server 2008 R2)

1 ответ

Решение

Хранение значений даты как nvarchar вообще не рекомендуется

Есть много предложений по повышению производительности соединения:

  • использование Date тип данных
  • Используйте два числовых поля месяц и год вместо одного поля varchar ( tinyint на месяц, smallint на год их можно использовать только для присоединения)

Обратите внимание: упомянуто как AS @P, когда вы храните месяц и год отдельно, вам нужно выполнить некоторые целочисленные манипуляции при поиске диапазонов дат

Другие вопросы по тегам