是否值得将PRIMARY KEY从类型NVARCHAR切换到INT类型?

Luc*_*ian 4 sql t-sql sql-server primary-key query-performance

在我们的SQL SERVER 2008 R2数据库中,我们有一个COUNTRIES包含国家/地区的参照表.这PRIMARY KEY是一个nvarchar列:

create table COUNTRIES(
   COUNTRY_ID nvarchar(50) PRIMARY KEY,
   ... other columns
)
Run Code Online (Sandbox Code Playgroud)

主键包含"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
)
Run Code Online (Sandbox Code Playgroud)

此销售表包含一个名为的列COUNTRY_ID,也是类型nvarchar(不是主键).这个表要大得多,包含大约2000万行.

在我们的应用程序内部,当在SALES桌面上查询时,我们几乎每次都在过滤COUNTRY_ID.即使这样,执行大多数聚合查询也需要很长时间(即使有适当的索引)

我们正处于开发阶段,以提高SALES表上的查询性能.我的问题是:

是否值得将COUNTRY_ID类型nvarchar(50)转换为类型int如果列COUNTRY_ID在两个表中都转换为类型int,那么在加入两个表时我能期望更好的性能吗?

Dar*_*ren 5

我个人建议改变COUNTRY_IDnvarchar(50)一个INT.一个int使用4字节的数据,通常JOIN比它快VARCHAR.

您还可以通过使用来检查是否减少了使用的空间 stored procedure sp_spaceused

EXEC sp_spaceused 'TableName'
Run Code Online (Sandbox Code Playgroud)