我正在使用SQL Server 2012&创建一个包含8列的表,类型如下所示。我正在尝试评估哪些列应该用作索引以及它们应该是聚簇索引还是非聚簇索引。
每天(通常)一次,将上传大约10,000行数据。展望未来可能是10万。
type column name
------------- ------------
datetime UploadDate
varchar(12) SecID
varchar(6) FundCode
varchar(100) Name
float Price
float Nominal
int SourceCode
datetime PriceDate
某些行的示例
UploadDate SecID FundCode Name Price Nominal SourceCode PriceDate
2015-08-20 A045 ABCVPL Joe 1.3434 1000.33 3
2015-08-20 A563 ABCVPL Bob 1.5961 10.33 3
2015-08-20 A045 DEFGHJ Joe 1.3434 856.41 3
2015-08-20 XC45 PLMNOI Pip 2.3654 25.52 3
2015-08-20 KMM5 ABCVPL Nit 6.9565 1532 3
2015-08-21 A045 ABCVPL Joe 4.3434 1112 3
2015-08-21 GH45 DEFGHJ Joe 3.3434 16532 3
2015-08-21 PL34 DEFGHJ Joe 7.3434 635 3
2015-08-21 ER33 ABCVPL Joe 8.3434 6320 3
隔夜进程会在数据库中插入新行,因此这里所用的时间不是问题。
它只是在桌子上运行的选择查询&没有主键。
如果我们以1天为例说明数据。让我们说今天上传了10,000行。所有10,000行的NextDate列将于2015年8月21日。 FundCode列可以采用20个不同的值。所有其他列(除了SourceCode - 虽然不认为这将被多次查询)将具有不同的值,并且几乎采用无限值。
所以我相信FundCode& UploadDate可能是两列,可能是索引的候选者看起来是否正确?如果是这样,它们应该是群集的还是非群集的,为什么?
更新
只是添加使用前三列作为索引将创建一个唯一的行 - 不确定是否有帮助
答案 0 :(得分:0)
在任何列或列组合上创建主键时,会创建聚簇索引
表格上不能有多个聚集索引
大部分时间都会在其上进行搜索的其他列,在其上创建非聚集索引
首先在前三列创建主键
在您将主要用于搜索条件的列上创建非聚集索引