0

基本上我们有一个需要优化的视图。视图现在看起来像这样:

SELECT *
FROM IM_Data.history.v_SystemInfo si
INNER JOIN IM_Data..systemOutDates od ON
    si.TopId = od.TopId
    AND si.OutDate = od.OutDate
WHERE 
    TopId = 196

如果我可以让视图是这样的(我显然不能):

SELECT @OutDate = OutDate 
FROM IM_Data..systemOutDates
WHERE TopId = 196

SELECT *
FROM IM_Data.history.v_SystemInfo si
WHERE 
    TopId = 196 AND
    OutDate = @OutDate

它会快 10 倍。所以我正在寻找的是一个对 SQL 有足够了解的人来帮助我解决这个问题。我基本上需要查询一次查询 TopDate,然后在所有行上使用相同的查询,而不是在每一行上加入(因为那是浪费时间)。

而且我无法删除 TopDate 并让查询视图的用户处理它,因为使用视图的遗留代码太多。所以唯一的选择是让用户按现在的方式查询它,但仍然以某种方式解决了连接的性能损失。

提前致谢!

4

1 回答 1

0

不确定我是否理解您的问题,但您可以使用子查询或临时加入条件表以获得一个结果。如果没有您的结构示例,几乎不可能判断是否有更好的选择。我想这样的事情可能会接近你想要的 - 看看查询成本,看看它是否有帮助。

SELECT * FROM 
    IM_Data.history.v_SystemInfo AS si INNER JOIN 
    (SELECT TOP 1 OutDate FROM IM_Data..systemOutDates WHERE sourceId = si.TopId) AS    tblOutDate
WHERE 
    si.TopId = 196 AND si.OutDate = tblOutDate.OutDate
于 2013-02-06T09:40:07.770 回答