我相当古怪的角色尺码大会有什么好处吗?

时间:2010-02-23 15:59:19

标签: sql-server binary storage

我爱的是2的力量。我庆祝我的32岁生日,知道这是32年来的最后一次,我能够宣称我的年龄是2的力量。我很痴迷。这就像是一些Z-list蝙蝠侠恶棍,除了没有丰富多彩的冒险和满脸的巴塔兰人。

我确保我的所有enum值都是2的幂,如果仅用于将来的按位运算,并且我可以合理地确保有一些目的(即使是潜在的)正在做。

我不太确定,我在如何定义数据库字段的长度。再一次,我无法帮助它。一切都最终成为2的力量。

CREATE TABLE Person
(
    PersonID int IDENTITY PRIMARY KEY
   ,Firstname varchar(64)
   ,Surname varchar(128)
)

任何知道存储和检索内容的内部人员的SQL超级boffins能否告诉我对我莫名其妙的痴迷是否有任何好处?以这种方式调整字符字段的大小是效率吗?任何人都可以使用“实际上,你正在做什么,因为......”

我怀疑我的年纪越来越疯狂,但知道我的疯狂有一些方法会很好。

3 个答案:

答案 0 :(得分:2)

好吧,如果我是你的同事并且我正在读你的代码,我不必使用SVN责备找出是谁写的。那太酷了。 :)

答案 1 :(得分:1)

两个唯一相关的权限是5124096,它们分别是默认磁盘块大小和内存页面大小。如果您的总行长超过这些边界,那么可能会注意到不成比例的跳转和性能转储,如果您看起来非常接近。例如,如果您的行长度为513个字节,则需要读取单个行的块的两倍,而不是512个字节的行。

问题在于计算正确的行大小,因为内部存储格式没有很好地记录。

另外,我不知道SQL Server是否实际上保持行块对齐,所以无论如何你可能都不幸。

答案 2 :(得分:0)

使用varchar,您只存储了长度为+ 2的字符数。

通常,最大行大小为8060

CREATE TABLE dbo.bob (c1 char(3000), c2 char(3000), c31 char(3000))

Msg 1701, Level 16, State 1, Line 1
Creating or altering table 'bob' failed because the minimum row size would be 9007, including 7 bytes of internal overhead. This exceeds the maximum allowable table row size of 8060 bytes.

2个东西的力量坦率地说是非理性,这在程序员中并不好......