从大表中获取不同值的最佳方法

der*_*ion 7 sql-server performance

我有一个db表,大约有10个左右的列,其中两个是月份和年份.该表现在有大约250k行,我们预计它每月增长约100-150k.很多查询涉及月份和年份列(例如,2010年3月的所有记录),因此我们经常需要获得可用的月份和年份组合(即我们是否有2010年4月的记录?).

同事认为我们应该有一个单独的表,我们的主要表只包含我们有数据的月份和年份.我们每月只会在主表中添加一次记录,因此只需在脚本末尾进行一次小更新即可将新条目添加到第二个表中.每当我们需要在第一个表上找到可用的月/年条目时,将查询第二个表.这个解决方案对我来说很糟糕,并且违反了DRY.

你认为解决这个问题的正确方法是什么?有比两张桌更好的方法吗?

Adr*_*der 13

使用所需的列(年和月)一个简单的指数应大幅度提高无论是DISTINCT,或GROUP BY查询.

我不会使用辅助表,因为这会增加额外的头脑以维护辅助表(插入/更新删除将要求您验证辅助表)

编辑:

您甚至可能希望考虑使用SQL Server 2005索引视图提高性能

  • +1.甚至不考虑另一张桌子! (2认同)

Gab*_*ães 4

确保这些列上有聚集索引。并在这些日期列上对表进行分区,并将数据文件放在不同的磁盘驱动器上,我相信保持索引碎片较低是最好的选择。

我还相信具有所需选择的物理视图不是一个好主意,因为它增加了插入/更新开销。平均每分钟有 3.5 次插入。或每次插入之间大约 17 秒(平均而言,如果我错了,请纠正我)

问题是您选择的频率是否高于每 17 秒一次?这是关键思想。希望有帮助。