【发布时间】:2016-01-06 09:06:54
【问题描述】:
您能帮我优化查询吗?我们正在使用相关的子查询来解决我们的问题。如何提高性能并去除相关子查询。
SELECT CAST((CASE WHEN value = 1
THEN CASE WHEN (SELECT COUNT(records)
FROM ABC
WHERE ABC.ID = XYZ.ID) > 0
THEN 1
ELSE 0 END
ELSE CASE WHEN (SELECT COUNT(records)
FROM PQR
WHERE PQR.ID = XYZ.ID) > 0
THEN 1
ELSE 0 END END) AS AA) AS COLUMN FROM XYZ
【问题讨论】:
-
您能否提供一些示例输入数据和所需的输出 - 这将有助于了解您要实现的目标。
-
相关子查询不一定很慢。在某些情况下,它们甚至可能是最快的方法。如 Arth 的回答所示,它是
EXISTS,但您应该使用,而不是COUNT。为了使这个不相关,您可以改用IN,但如前所述,这并不一定意味着查询变得更快;它甚至可以变得更慢。无论如何,请确保在相关列上有索引。