5

在我们的 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(不是主键)。这个表要大得多,包含大约 2000 万行。

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

我们正处于改进SALES表查询性能的开发阶段。我的问题是:

是否值得将COUNTRY_ID类型从类型切换nvarchar(50)到类型int如果两个表中的列COUNTRY_ID都转换为 type int,在加入两个表时我可以期待更好的性能吗?

4

1 回答 1

6

我个人建议COUNTRY_ID从更改nvarchar(50)INT. int 使用 4 字节的数据,通常JOINVARCHAR.

您还可以使用stored procedure sp_spaceused

EXEC sp_spaceused 'TableName'
于 2013-07-04T12:00:52.227 回答