Sql server SQL-定义表的键

Sql server SQL-定义表的键,sql-server,database-design,Sql Server,Database Design,对于已经有很多记录且在其上操作的大多数操作都是插入的表,是否需要考虑定义键 键定义最终归结为如何唯一有效地标识表中的任何特定行。如果业务关键值满足该要求,那么它就是合适的候选者。理想的钥匙也很瘦。GUID对此(IMHO)非常糟糕,因为它远远大于需要的大小 如果插入性能是最重要的优先级,并且没有合适的业务密钥,则可以使用基于整数的标识密钥。如果您预计在几年内会有超过21亿条记录,请改用bigint(9/5百万条记录) 请记住,您在表中创建的每个索引都将始终包含PK。拥有一个精简的PK可以使索引更高

对于已经有很多记录且在其上操作的大多数操作都是插入的表,是否需要考虑定义

键定义最终归结为如何唯一有效地标识表中的任何特定行。如果业务关键值满足该要求,那么它就是合适的候选者。理想的钥匙也很瘦。GUID对此(IMHO)非常糟糕,因为它远远大于需要的大小

如果插入性能是最重要的优先级,并且没有合适的业务密钥,则可以使用基于整数的标识密钥。如果您预计在几年内会有超过21亿条记录,请改用bigint(9/5百万条记录)

请记住,您在表中创建的每个索引都将始终包含PK。拥有一个精简的PK可以使索引更高效,使用更少的存储、内存和CPU


插入速度受聚集索引排序顺序以及表上所有非聚集索引的数量和排序顺序的影响。列存储索引不排序,插入时的开销最小。

如果您有一个主键,存储ID号较重,则自动增加编号,因此在定义键时请记住,为自动增加编号创建另一列主键是非常必要的