Sql server 长varchar上的群集主键?

Sql server 长varchar上的群集主键?,sql-server,Sql Server,通常,我们避免在宽列上创建聚集索引。有一张桌子 create table T (K varchar(255) primary key noclustered, ....) 但是,K列中的大多数值(99%)的长度小于10。在上面创建聚集索引好吗 您需要一个很好的理由来将其作为集群密钥。为什么非聚集索引不令人满意?这个表上还有其他索引吗?如果只有聚集索引,那么无论如何它都不是最优的,但你可能会接受它。但如果您也有多个非聚集索引,请记住:聚集索引的列也会重复存储在每个非聚集索引中。因此,如果您有多个

通常,我们避免在宽列上创建聚集索引。有一张桌子

create table T (K varchar(255) primary key noclustered, ....)

但是,
K
列中的大多数值(99%)的长度小于10。在上面创建聚集索引好吗

您需要一个很好的理由来将其作为集群密钥。为什么非聚集索引不令人满意?这个表上还有其他索引吗?如果只有聚集索引,那么无论如何它都不是最优的,但你可能会接受它。但如果您也有多个非聚集索引,请记住:聚集索引的列也会重复存储在每个非聚集索引中。因此,如果您有多个NCI和数百万行,那么使用宽且次优的群集服务器可能会浪费大量磁盘(和RAM!)空间index@sqlzim是的,还有8个indexes@marc_s我知道其他索引的存储。但是,K中的大多数值都非常窄。但是如果您有8个其他索引,8 x 1亿行,并且您的平均字符串长度为12字节,那么您仍然在浪费8 x 1亿x 8字节(与
INT
聚集索引相比)。。。这需要很大的磁盘空间——更不用说,当页面加载到缓冲池时,这也需要存在于服务器的RAM中