一个带varchar(255)PRIMARY KEY的表会伤害到什么吗?

时间:2012-03-20 01:55:57

标签: 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]键进行比较的详细信息会很有趣,但只要确认这不会对任何事情造成伤害就足够了。

3 个答案:

答案 0 :(得分:5)

  

您可以使用VARCHAR(#)作为主键吗?

是。
the documentation开始,VARCHAR(255)将占用该列的257(255 + 2)个字节(取决于实际数据的长度) - 每

  

了解有关此类密钥与INT密钥

的比较的详细信息会很有趣

INT需要4个字节,according to documentation。根据您的数据,数字数据类型占用的空间更少:

  • SMALLINT:2个字节
  • TINYINT:1个字节

字节数越少,列中访问数据的速度就越快。这包括JOIN。此外,数据库(和备份)将更小。

我非常怀疑需要这么大的VARCHAR作为主键 - GUID甚至都不长。

答案 1 :(得分:1)

不,您几乎可以在任何SQL类型上创建主键。如果它会使服务器崩溃,SQL将不允许它。正如您已经说过的那样,这对于服务器内存或性能来说并不是很好。

事实上,这是问题表现部分的SO answer

答案 2 :(得分:0)

这会带来性能开销,但它不会让服务器崩溃。