选择要用于索引的列以及它们应该是群集还是非群集

时间:2015-08-21 13:51:04

标签: sql sql-server sql-server-2012

我正在使用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可能是两列,可能是索引的候选者看起来是否正确?如果是这样,它们应该是群集的还是非群集的,为什么?

更新

只是添加使用前三列作为索引将创建一个唯一的行 - 不确定是否有帮助

1 个答案:

答案 0 :(得分:0)

  1. 在任何列或列组合上创建主键时,会创建聚簇索引

  2. 表格上不能有多个聚集索引

  3. 大部分时间都会在其上进行搜索的其他列,在其上创建非聚集索引

    • 首先在前三列创建主键

    • 在您将主要用于搜索条件的列上创建非聚集索引