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 数据库引擎优化顾问工具,这对于主要工作不是数据库设计的人来说非常有帮助.
虽然您可以将其作为最后沟渠性能优化,但我建议不要这样做.主要是因为它使得很难容纳新的DeviceID.
无论如何,这样做不应该是必要的.如果存在DeviceID的索引,则DBMS应该能够非常快速地对其进行过滤.毕竟,这就是DBMS的用途......
我担心这种方法会增加任何需要访问这些数据的应用程序的复杂性.另一种方法是将每个设备放在一个单独的表中,同时仍然将所有设备保存在同一个表中,从而获得任何好处,就是在DeviceID上对表进行分区.我建议您调查表分区,看它是否符合您的需求.
分享和享受.