【发布时间】:2019-09-18 23:08:35
【问题描述】:
我有一个查询优化问题。
对于上下文,这个查询一直是即时运行的
但今天花了更多时间。 (3h+)
所以我试图修复它。
查询是 Like -->
Select someCols from A
inner join B left join C
Where A.date = Today
And (A.col In ( Select Z.colseekedinA from tab Z) --A.col is the same column for
-- than below
OR
A.col In ( Select X.colseekedinA from tab X)
)
-- PART 1 ---
Select someCols from A
inner join B left join C -- takes 1 second 150 lines
Where A.date = Today
-- Part 2 ---
Select Z.colseekedinA from tab Z
OR -- Union -- takes 1 seconds 180 lines
Select X.colseekedinA from tab X
当我现在用 In 加入这两个部分时,查询变得非常长。
所以我使用 union 或 OR 来优化它,并且 exists 而不是 in 但仍然需要 3 分钟
我想在 5 秒内再次完成。
您是否看到一些查询问题?
谢谢
【问题讨论】:
-
您的 sn-p 中有 3 个查询,而不是一个。就目前而言,您的问题很模糊。
-
OR -- UNION是什么意思?OR?A.date = Today 的子句在哪里 ` 也不是有效的语法。TODAY不是 t-SQL 关键字(除非Today是A、B或C中的列,在这种情况下它应该使用别名)。 -
发布解释计划。将帮助我们更好地分析
-
除了 Larnu 提出的观点之外,您所有的连接查询在语法上都是不正确的,因为您缺少连接的
ON位。 -
另外,如果之前查询很快,有什么变化?
标签: sql sql-server performance tsql