数据仓库,只需极少的更改

时间:2011-02-22 21:47:41

标签: database sql-server-2008

好的,我有一张表有10年的数据,性能正在受到打击。我打算将旧数据移到单独的历史记录中。问题是我需要从第一个表中选择是否在那里,如果没有则从第二个表中选择。我不想进行连接,因为它会在第二个表上进行查找。 HELP?

2 个答案:

答案 0 :(得分:1)

与其使用单独的历史表,您可能希望通过某个日期函数(可能是年份?)来对表进行分区,以改善性能。

答案 1 :(得分: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

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

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