我知道这不是一个好主意,但我想仔细检查一下这不会像崩溃服务器那样疯狂。
CREATE TABLE [dbo].[Items](
[Id] [nvarchar](255) NOT NULL PRIMARY KEY,
[Value] [nvarchar](max) NOT NULL,
)
了解有关如何将这样的键与[int]键进行比较的详细信息会很有趣,但只要确认这不会对任何事情造成伤害就足够了。
答案 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)
这会带来性能开销,但它不会让服务器崩溃。