2011-02-22 63 views
0

好吧,我有一张拥有10年价值数据的表格,性能正在受到重创。我计划将旧数据转移到单独的历史数据表中。问题是我需要从第一个表中选择,如果它在那里,第二个表如果没有。我不想做一个连接,因为那样它总是会在第二张桌子上查找。帮帮我?数据仓库的变化很小

+0

您不能根据标识字段进行迁移或创建日期吗? – Oded 2011-02-22 21:54:27

+0

10年的数据:有多少行,这些索引表现如何?统计更新? – 2011-02-22 21:57:48

+0

@Oded - 请详细说明,我计划每周执行一次流程,并将符合特定条件的行移至历史记录表。我希望的是说:“SELECT * from currentdata,如果0 rows select * from olderdata” – 2011-02-22 21:58:38

回答

1

如果您仍然需要查询数据,我决不会将它移动到另一个表中。现在桌子有多大?什么是索引?你有没有考虑过分配桌子?

如果您必须移动到另一个表,您可以使用if语句在存储的特效库中查询。首先查询主表,然后如果rowcount = 0查询另一个表。对于不在主表中的记录来说速度会更慢,但如果它们在那里的话应该保持快速。但是,它不知道你什么时候需要记录。

的代码示例来做到这一点:

CREATE PROC myproc (@test INT) 
AS 
SELECT field1, field2 from table1field1, field2 from table1 
IF @@rowcount = 0 
BEGIN 
SELECT field1, field2 FROM table2 field1, field2 from table1 
END 

但真正的partioning和索引正确是probaly您的最佳选择。还优化现有的查询。如果您正在使用已知性能较差的技术,例如游标,相关子查询,调用视图的视图,标量函数,不可调整的where子句等,只修复查询可能意味着您不必进行归档。

有时候,购买更好的服务器也会有帮助。

+0

原谅我对这部分的无知,我已经使用存储过程进行更新等,但从未从一个选择。语法怎么看? – 2011-02-22 22:05:28

1

而不是使用一个单独的历史表,您可能需要考虑通过日期的某个函数(年或许?)对表进行分区以提高性能。