假设我有以下表模式:
ID | Name | Width | Height | Size
将此表拆分为具有一对一关系的两个表时需要考虑哪些因素?
E.g:
ID | Name
and
ID | Width | Height | Size
我担心的是我会在桌面上有很多专栏(不只是五个,这里仅用于说明目的,将来很有可能添加新专栏)。我担心较大的表行大小会对性能和/或设计的清晰度产生负面影响。这是真的?与加入表格相比,性能受到了影响。
答案 0 :(得分:1)
超过8,060字节的行大小限制可能会影响性能,因为SQL Server 2005数据库引擎仍然保持每页8 KB的限制。当varchar,nvarchar,varbinary,sql_variant或CLR用户定义类型列的组合超出此限制时,数据库引擎将具有最大宽度的记录列移动到ROW_OVERFLOW_DATA分配单元中的另一页,同时保持24字节指针在原始页面上。将大型记录移动到另一个页面会动态发生,因为记录会根据更新操作延长。缩短记录的更新操作可能会导致记录移回IN_ROW_DATA分配单元中的原始页面。此外,查询和执行其他选择操作(例如对包含行溢出数据的大型记录进行排序或连接)会减慢处理时间,因为这些记录是同步处理而不是异步处理。
拉吉
答案 1 :(得分:0)
您应该将相关信息(如产品名称和规格)分组,主要是因为信息汇集在一起。
如果你想将它们分开,你唯一真正的'提升'就是当你只想访问第一个表时,因为第二个表需要第一个表中的信息才有用。 (您需要使用该名称来标识产品)
我可能会坚持使用原始解决方案,除非你想制作一个尺寸表,一个产品表以及这两者之间的关系。
答案 2 :(得分:0)
首先,你的做法是错误的。通过使用适当的规范化等设计数据库,您应该如何设计它。只有当你遇到实际的性能问题时,才应该开始担心这类事情。
除了行限制之外,列数确实无关紧要等。如果您有数百(或数千)列,可能会到达需要将其拆分为多个表的位置,但在实际发生之前不要担心。