如果我有一个大表,其中一列的值范围相当有限(例如例如,带有列的表格:
表“timestamps”:[id][deviceid][messagecounter][somedata]
其中[DeviceId]
是“有限范围”列,可分为几个不同的表:
表“timestamps1”:[id][messagecounter][somedata]
表“timestamps2”:[id][messagecounter][somedata]
…
表“timestampsn”:[id][messagecounter][somedata]
我在原始表中遇到的问题是,为某些deviceid值查找最大的messagecounter值需要很长时间才能执行(请参阅thispost)。
如果表分离,则找到最大列数应该是O(1)操作。
[编辑]
只是偶然发现了这个,以为我会更新。通过适当的索引配置和预定的索引重新组织作业,使用规范化格式可以获得很好的性能。我建议为每个瓶颈查询尝试ssms数据库引擎优化顾问工具,这非常有帮助(对于主要工作不是数据库设计的人)。
最佳答案
虽然你可以把它作为最后的性能优化,但我建议你不要这样做。主要是因为这使得很难适应新的设备。
无论如何,这样做是没有必要的。如果有一个deviceid索引,dbms应该能够很快地对其进行过滤。这就是DBMS的作用,毕竟…