2014-01-23 76 views
2

我有一百万行的数据集,我经常在A列中加入独特VS非唯一聚簇索引,以加快对非唯一场

要加快加盟我要创建一个列一个聚集索引搜索

列A不是唯一的,但(列A,列B)是唯一的配对。

我绝不会在where子句或连接中使用B列。

我最好在列A上创建一个非唯一的聚集索引,或者在(列A,列B)上创建一个唯一的聚集索引?

+0

那张桌子上还有其他索引吗?它有PK吗? –

回答

2

您将在A,B上创建一个唯一索引来强制值的唯一性。这是在数据库级别强制执行的,因此您将无法将重复值插入到数据库中。

唯一索引可用于解析需要索引中第一列的查询,但不一定是全部索引。所以,对于A的查询,唯一索引是很好的。

我会说创建唯一索引。有两件事要记住。首先是B是一个大数据类型 - 如char(500)。这些值存储在索引中,因此包括B可能会使索引相当大。其次,如果未按A, B顺序插入数据,则使其成为聚集索引可能会导致插入和删除的性能开销。新插入最终会随机进入一个页面,这可能会被填充,然后需要拆分(或者可以使用页面的填充因子为插入保留额外的空间,代价是使表格初始更大)。