优化工会

时间:2008-11-27 14:08:06

标签: sql sql-server-2005 optimization

我在尝试优化sql server 2005的以下查询时遇到问题。有谁知道如何改进它。在那里使用的每个表都有大约4000万行。我已尽力尝试优化它,但我设法做了完全相反的事情。

由于

SELECT
        cos
      , SIN
    FROM
        ConSisHis2005
    union all
    SELECT
        cos
      , SIN
    FROM
        ConSisHis2006
    union all
    SELECT
        cos
      , SIN
    FROM
        ConSisHis2007
    UNION ALL
    SELECT
        cos
      , SIN
    FROM
        ConSisHis2008

也许我应该对模式说一些其他内容,这里使用的所有表都是历史表,它们不会引用任何其他表。并且已经是cos和SIN的索引。我只是想知道是否有任何其他方法来优化查询......因为你可以想象160毫米的记录很难得到:s

7 个答案:

答案 0 :(得分:2)

似乎查询只是将分离的历史表组合成一个包含所有数据的结果集。在这种情况下,查询已经是最优的。

答案 1 :(得分:2)

另一种方法是解决为什么需要拥有所有1.6亿行的问题?如果您正在进行某种报告,可以创建已经汇总了一些数据的单独报告表。或者你真的需要一个数据仓库来支持你的报告需求。

答案 2 :(得分:1)

在每个表上放置cos和sin的复合索引。如果没有重组表设计,那就好了(在这个例子中,看起来你应该只有一个表开始)

答案 3 :(得分:1)

由于没有WHERE子句,我不相信你可以采取任何措施来改善这个PoV的性能。

你已经正确使用了UNION ALL,所以那里没有任何帮助。

我唯一能想到的是桌子上是否有更多列?如果是这样,您可能从磁盘中获取的数据超出了您的需求,从而减慢了查询速度。

答案 4 :(得分:1)

可能值得尝试使用索引视图。您可以将上述语句放入Dave建议的索引视图中。这可能需要一些时间来构建,但会更快地返回结果(这是假设数据集没有太大变化,因此您可以忍受额外的事务开销)。

答案 5 :(得分:0)

您可以考虑使用带有年份指标的单个分区表。

我仍然很好奇 - 这个代码是在一个视图中还是SP,它在160米的行上运行,或者实际上它会在线路上返回160米的行。如果是这样的话,这将是一个非常多的数据返回,这实际上是一个提取物,它需要一段时间才能下线。

答案 6 :(得分:0)

没有优化要做。由于您选择了所有表中的所有记录,因此根据定义,您可以从一个结果集中的所有表中获取所有记录。

这样做的原因是什么?