我们有 2 张 table 。一个保存测量值,另一个保存时间戳(每分钟一个) 每个测量都保存一个时间戳的 FK。 我们有 8M(百万)测量值和 2M 时间戳。
我们正在通过复制创建报告数据库,我的第一个解决方案是:当通过复制过程收到新的测量值时,查找正确的时间戳并将其添加到测量表中。 是的,这是数据重复,但它用于报告,并且由于我们每 5 分钟进行一次测量,并且用户可以查询年度数据(105.000 次测量),因此我们必须优化速度。
但是一位合作开发人员说:你不必这样做,我们只需使用联接进行查询(在两个表上),SqlServer 太快了,你看不到差异。
我的第一 react 是:对具有 8M 和 2M 记录的两个表进行联接不能“没有区别”。
您对此的第一感觉是什么?
编辑: 新测量:每 5 分钟 400 条记录
编辑2: 也许问题不太清楚:
第一种解决方案是在插入测量记录时从时间戳表中获取数据并将其复制到测量表中。 在这种情况下,当插入记录和一个额外的(重复的)时间戳值时,我们会执行一个操作。在本例中,我们只查询一张表,因为它保存了所有数据。
第二个解决方案是在查询中连接两个表。
最佳答案
使用正确的索引,连接不会产生任何影响*。我最初的想法是,如果报表查询整个数据集,连接实际上可能会更快,因为它必须从磁盘读取的时间戳实际上减少了 600 万个。
*这只是根据我对包含数百万条记录的表的经验的猜测。您的结果将根据您的查询而有所不同。
关于sql-server - 您对这个 SqlServer 设计问题的第一直觉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3930710/