在我们的SQL SERVER 2008 R2数据库中,我们有一个COUNTRIES
包含国家的参考表。该PRIMARY KEY
是一个nvarchar列:是否值得将PRIMARY KEY从NVARCHAR类型切换到INT类型?
create table COUNTRIES(
COUNTRY_ID nvarchar(50) PRIMARY KEY,
... other columns
)
主键包含了诸如“FR”,“GER”,“美国”,“英国”等,这表包含最大值。 20排。
我们也有一个SALES
表包含销售数据:
create table SALES(
ID int PRIMARY KEY
COUNTRY_ID nvarchar(50),
PRODUCT_ID int,
DATE datetime,
UNITS decimal(18,2)
... other columns
)
这种销售表包含还nvarchar
类型的命名COUNTRY_ID
列(而不是主键)。这个表格要大得多,大约有2000万行。
在我们的应用程序中,当查询SALES
表格时,我们几乎每次都在COUNTRY_ID
上进行过滤。即使如此,执行大多数聚合查询也需要很长时间(即使使用适当的索引)
我们正处于开发阶段,以提高SALES
表上的查询性能。我的问题是:
是否值得将COUNTRY_ID
类型从nvarchar(50)
改为int
类型?如果COUNTRY_ID
列在两个表中都转换为int
类型,那么在连接两个表时能否获得更好的性能?
这是一个潜在的[复制](http://stackoverflow.com/questions/332300/is-there-减少一个实时的性能差之间-INT和 - VARCHAR-主密钥)。 – Scott
@Scott - 事件如果这几乎是一样的话,那个问题就是指MySQL,而不是SQL Server。在那里的一些答案可以匹配我的情况,但我希望得到一些更具体的SQL Server技术答案(也许一些数字也)。我希望你们不会关闭我的问题 – Lucian
当你有连接时,int可能会更快,但另一方面,拥有语义主键可能意味着你甚至不需要加入国家/地区表,因为你可以直接在外键上过滤。 – alun