性能查询慢
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;
我的查询性能很慢,有时会出现 "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;