性能查询慢

Slow performance query

我的查询性能很慢,有时会出现 "Can't allocate space for object 'temp work table'"

的错误

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

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

上面的查询很慢。但是当我使用#temp table 它变得更快。

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 个 table 放入临时 table 并使用它,速度会更快。

基本上在第一个查询中,您访问的是每一行的视图,然后视图正在执行它的查询。

在第二个中,您只执行一次视图查询并通过临时 table.

使用返回的结果

尝试:

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