加入ad-hoc子查询的性能问题

时间:2012-03-30 03:41:30

标签: sql

创建报告时,我发现自己经常加入ad-hock子查询,如下所示:

SELECT * FROM Customer c
JOIN (SELECT CustomerId,ContractId FROM Contract WHERE StartDate > GetDate()) co ON co.CustomerId = c.CustomerId

显然这只是一个qucik demo sql,但它说明了这一点。 我想知道这些类型的查询是否存在一些性能问题。还有其他好的选择吗?通常,子查询更复杂,有聚合等等。

我知道在这种情况下,直接加入联系表更有意义,但我只想说明一般的想法,而不必提供一个复杂的例子。

任何反馈都将不胜感激:-) 这是一种常见做法吗?

1 个答案:

答案 0 :(得分:1)

不要迂腐,但技术上不是ad-hoc query,它将被定义为由系统最终用户创建的查询。相反,您的示例实际上只是一个子查询。

要解决您的问题,如果您发现自己多次加入同一个子查询,则应创建一个视图,然后再加入该视图。这样您就可以简化代码,并在一个位置对子查询进行任何更改。

如果您只在一个报表中使用这些子查询,并且它们之间没有任何共同点可以放在视图中,那么它实际上只是编写查询的另一种方式。它没有什么不好的,并且它并不罕见,但你可能会考虑其他方法,例如用额外的连接替换你的子查询 - 这可能会为你提供更好的执行计划,但这会因其他几个因素而有所不同,包括哪个RBDMS这个是为了。

相关问题