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,那么在加入两个表时我能期望更好的性能吗?
我个人建议改变COUNTRY_ID从nvarchar(50)一个INT.一个int使用4字节的数据,通常JOIN比它快VARCHAR.
您还可以通过使用来检查是否减少了使用的空间 stored procedure sp_spaceused
EXEC sp_spaceused 'TableName'
Run Code Online (Sandbox Code Playgroud)