Sql server 带有varchar(255)主键的表会有什么影响吗?
我知道这不是一个好主意,但我想再次检查一下,这不会让服务器崩溃Sql server 带有varchar(255)主键的表会有什么影响吗?,sql-server,database-design,sql-server-2008-r2,sqldatatypes,Sql Server,Database Design,Sql Server 2008 R2,Sqldatatypes,我知道这不是一个好主意,但我想再次检查一下,这不会让服务器崩溃 CREATE TABLE [dbo].[Items]( [Id] [nvarchar](255) NOT NULL PRIMARY KEY, [Value] [nvarchar](max) NOT NULL, ) 了解类似这样的键与[int]键的比较细节是很有意思的,但只要确认这不会损害任何东西就足够了。不,您几乎可以在任何SQL类型上创建主键。如果SQL会使服务器崩溃,它将不允许这样做。正如您已经说过的,这对服务
CREATE TABLE [dbo].[Items](
[Id] [nvarchar](255) NOT NULL PRIMARY KEY,
[Value] [nvarchar](max) NOT NULL,
)
了解类似这样的键与[int]键的比较细节是很有意思的,但只要确认这不会损害任何东西就足够了。不,您几乎可以在任何SQL类型上创建主键。如果SQL会使服务器崩溃,它将不允许这样做。正如您已经说过的,这对服务器内存或性能都不是很好
事实上,这是这个问题的性能部分的关键。这会带来性能开销,但不会“使服务器崩溃” 可以使用VARCHAR(#)作为主键吗 是的。
从中,对于该列,
VARCHAR(255)
每行将占用257(255+2)字节(取决于实际数据的长度)
了解类似这样的键与INT
键的比较细节会很有趣
INT
需要4个字节。根据您的数据,有占用较少空间的数字数据类型:
:2字节SMALLINT
:1字节TINYINT
我非常怀疑是否需要使用如此大的
VARCHAR
作为主键--guid甚至没有那么长。我使用它是为了方便快速完成一些事情-我知道从长远来看,这是一个糟糕的设计选择-感谢您的建议…因为您的主键也是该表上的集群键,有一个VARCHAR(255)
PK非常糟糕,原因有两个:(1)对于INT
,它太大(最多255个字节加上开销)而不是4个字节,其次,因为它是一个可变长度的列,这再次增加了索引导航结构的开销。如果这是一个包含多个非聚集索引的表,我强烈建议您重新考虑主键……Marc提到了不使用Id作为聚集索引的原因。不管他怎么说,这并不是它不成为主键的理由。主键不必群集。