根据列值将数据划分到不同的表中是否合理?

Gro*_*roo 3 sql database database-design sql-server-2005 normalization

如果我有一个大型表,其列具有相当有限的值范围(例如<100),将该表划分为多个名称与该列值相关联的表是否合理?

例如像列一样的表格:

table "TimeStamps": [Id] [DeviceId] [MessageCounter] [SomeData]

其中[DeviceId]是"有限范围"列将被分离成几个不同的表:

table "TimeStamps1": [Id] [MessageCounter] [SomeData]
table "TimeStamps2": [Id] [MessageCounter] [SomeData]
...
table "TimeStampsN": [Id] [MessageCounter] [SomeData]

我在原始表中遇到的问题是,为某些DeviceId值找到最大的MessageCounter值需要很长时间才能执行(参见本文).

如果表是分开的,找到最大列号应该是O(1)操作.

[编辑]

只是偶然发现了这个,以为我会更新它.通过一些正确的索引配置和预定的索引重组作业,我能够通过规范化表单获得出色的性能.我建议为每个瓶颈查询尝试SSMS 数据库引擎优化顾问工具,这对于主要工作不是数据库设计的人来说非常有帮助.

sle*_*ske 6

虽然您可以将其作为最后沟渠性能优化,但我建议不要这样做.主要是因为它使得很难容纳新的DeviceID.

无论如何,这样做不应该是必要的.如果存在DeviceID的索引,则DBMS应该能够非常快速地对其进行过滤.毕竟,这就是DBMS的用途......


Bob*_*ica 5

我担心这种方法会增加任何需要访问这些数据的应用程序的复杂性.另一种方法是将每个设备放在一个单独的表中,同时仍然将所有设备保存在同一个表中,从而获得任何好处,就是在DeviceID上对表进行分区.我建议您调查表分区,看它是否符合您的需求.

分享和享受.