好的,我有一张表有10年的数据,性能正在受到打击。我打算将旧数据移到单独的历史记录中。问题是我需要从第一个表中选择是否在那里,如果没有则从第二个表中选择。我不想进行连接,因为它会在第二个表上进行查找。 HELP?
答案 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子句等,只是修复查询可能意味着您不必存档。
有时,购买更好的服务器也会有所帮助。