我有两张桌子。这是在SQL Server 2008 R2中:
dbo.Source:SourceId(int),SourceName(varchar(10))
SourceId|SourceName
1|Source1
2|Source2
3|Source3
dbo.SourceIdentifiers:Id(int),SourceId(int)外键Source.SourceId,SourceIdentifier varchar(30)
Id|SourceId|SourceIdentifier
1|1|123
2|1|456
3|2|789
4|2|789
5|2|789
6|3|ABC
正如您所看到的,我从多个来源接收数据,大多数来源都有一个数字作为标识符,但其中一些也有字符。所以我的SourceIdentifier列需要是一个varchar。
通常会根据SourceIdentifier查询表。我可以拥有多达1亿个唯一的源标识符。我希望查询超快。我有几个问题:
谢谢!
答案 0 :(得分:1)
我认为你可以使用选项1)即:在SourceIdentifer列上创建非聚簇索引,如果需要从查询中获取SourceId以避免密钥查找,请确保使其覆盖索引。
2)方法的问题是你的连接会变得复杂,这会影响性能。
答案 1 :(得分:1)
如果有意义,我会将SourceIdentifier
编入索引。但是,如果您担心,可以执行以下操作:
PERSISTED
计算列
SourceIdentifierInteger
被定义为该结果
SourceIdentifier
WHERE
SourceIdentifierInteger IS NOT NULL
上添加过滤后的索引。当您查询时,如果是整数值,请在WHERE
上构建SourceIdentifierInteger
子句,否则在SourceIdentifier
列上构建
我不知道这会仅仅为SourceIdentifier
列编制索引而获得任何性能提升,但这是一个选项。