SQL Server:作为主键的 IDENTITY 与 INT 的性能

car*_*reo -1 sql-server primary-key sql-server-2008-r2 identity

我的数据库中最重要的表大约有 300,000 条记录,而且还在不断增加。20 多张桌子都有 FK。它的主键是一个数字,但由于历史原因被定义为 nvarchar(6),这显然是低效的(而且丑陋)。记录有时会从记录中删除,因此主键接近999,999,我必须更改它。身份字段将是显而易见的选择。具有由触发器或软件产生的增量的 int 键或类似键将是一种替代方法。这是可行的,因为记录总是一次插入一个。int 键会为复杂查询提供更好的性能吗?

Dav*_*ett 5

IDENTITY本身不是列类型,它是一个可以应用于任何整数列类型的属性。它通常应用于 anINT并且在这种情况下没有区别(该列一个INT列,具有IDENTITY定义的属性),尽管它可以应用于内部为整数(BIGINT, DECIMAL, MONEY, ...)的任何类型。

虽然您的字符串类型很难看,而且整数会更有效,但更改为数字类型将需要相当多的测试工作,以确保您的应用程序代码没有任何奇怪之处,使其对这些键的数据类型敏感。我强烈建议你不要只是做出改变,而是希望最好!NVARCHAR(10)如果任何代码假定键永远不会超过六个字符,即使只是将键扩展到或这样的可能会出现问题......如果您不切换到数字类型,至少考虑移动到CHAR()- 非变化的字符串格式也将更有效率,如果您只存储数字,则不需要像N[VAR]CHAR.