我有一百万行数据集,我经常加入A列。
为了加快加入,我将在A列上创建一个聚簇索引。
A列不是唯一的,但(A栏,B栏)是唯一的配对。
我永远不会在where子句或join中使用B列。
我最好只在A列上创建一个非唯一的聚簇索引,还是在(A列,B列)上创建一个唯一的聚簇索引?
答案 0 :(得分:2)
您可以在A,B
上创建唯一索引,以强制值的唯一性。这是在数据库级别强制执行的,因此将阻止您将重复值插入数据库。
唯一索引可用于解析需要索引中的第一列但不一定是所有索引的查询。因此,唯一索引适用于A
上的查询。
我想说创建唯一索引。要记住两件事。首先是B
是一种大数据类型 - 如char(500)
。这些值存储在索引中,因此包括B
可能会使索引相当大。
其次,如果数据没有以A, B
顺序插入,那么将其作为聚簇索引可能会导致插入和删除时的性能开销。新的插入最终会出现在随机页面上,这可能会被填充,然后需要拆分(或者您可以使用页面的填充因子为插入保留额外的空间,代价是使表格最初变大)。