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, когда вы храните месяц и год отдельно, вам нужно выполнить некоторые целочисленные манипуляции при поиске диапазонов дат