性能查询速度慢

时间:2015-08-05 05:59:50

标签: sql sybase

我的查询性能很慢,有时会出现“无法为对象临时工作表分配空间”的错误。

我有2个表和1个视图。前两个表具有左连接,最后一个视图将执行子查询。以下是示例查询。

SELECT a.* 
  FROM Table1 a LEFT JOIN Table2 b ON a.ID = b.ID 
 WHERE a.ID (SELECT ID 
               FROM View1).

以上查询非常慢。但是,当我使用#temp表时,它变得更快。

SELECT ID 
  INTO #Temp 
  FROM View1

SELECT a.* 
  FROM Table1 a LEFT JOIN Table2 b ON a.ID = b.ID 
 WHERE a.ID IN (SELECT ID 
                  FROM #Temp)

有人可以解释为什么第一个sql语句很慢吗?并且请给我一个建议,比如添加新索引?

注意:不能更改或修改第一个查询语句。我只使用第二个查询语句向我的团队显示,如果我们将第3个表放入临时表并使用它,则会更快。

1 个答案:

答案 0 :(得分:2)

基本上在第一个查询中,您正在访问每一行的视图,反过来视图正在执行它的查询。

在第二个中,您只执行一次视图查询,并通过临时表使用返回的结果。

尝试:

SELECT a.* 
  FROM Table1 a LEFT JOIN Table2 b ON a.ID = b.ID,
       (SELECT ID 
          FROM View1) c
 WHERE a.ID = c.ID;