В нашей базе данных SQL SERVER 2008 R2 у нас есть COUNTRIES
справочная таблица, содержащая страны. PRIMARY KEY
- это столбец nvarchar:
create table COUNTRIES(
COUNTRY_ID nvarchar(50) PRIMARY KEY,
... other columns
)
Первичный ключ содержит такие значения, как «FR», «GER», «US», «UK» и т. Д. Эта таблица содержит макс. 20 рядов.
У нас также есть SALES
таблица, содержащая данные о продажах:
create table SALES(
ID int PRIMARY KEY
COUNTRY_ID nvarchar(50),
PRODUCT_ID int,
DATE datetime,
UNITS decimal(18,2)
... other columns
)
Эта таблица продаж содержит столбец с именем COUNTRY_ID
, также типа nvarchar
(не первичный ключ). Эта таблица намного больше и содержит около 20 миллионов строк.
Внутри нашего приложения при запросе к таблице SALES
мы почти каждый раз фильтруем COUNTRY_ID
. Даже в этом случае выполнение большинства запросов агрегирования занимает слишком много времени (даже при наличии соответствующих индексов).
Мы находимся на этапе разработки, чтобы повысить производительность запросов к SALES
таблице. У меня вопрос:
Стоит ли переключать тип COUNTRY_ID
с nvarchar(50)
на тип int
? Если столбец COUNTRY_ID
в обеих таблицах преобразован в тип int
, могу ли я ожидать повышения производительности при объединении двух таблиц?