2011-11-04 60 views
0

我正在处理一个从列名列表中生成SQL查询的小项目。这些列分布在多个表中,但它们都在一个数据库中。某些列不是实际列,即它们是“范围”伪列,计算为一段时间内两列之间的差异。我的代码可以工作,但它会生成一个庞大的查询,其中包含大量的连接,外部连接,用于范围计算的别名(我的生成器必须跟踪并随着列的添加而重复使用)等。什么样的开销与SQL中的多个SELECT查询相关联?

全部的目标这是为了通过最少的后处理直接从数据库中获取大量数据来提高性能。那么我的问题是,如果我单独选择每个列(以简化我的生成器代码)并合并结果,是否会有显着的性能下降。有没有其他(更好的)方法来做到这一点,没有大量难以阅读的连接和别名?

回答

1

如果你在桌面上有必要的索引,我认为你看不到联盟与联盟相比的巨大性能。

但是最好的办法是查看每个执行计划,以便根据给定的信息做出最佳决策。而且你还可以看到附加索引的位置/增加性能。

0

是否可以在数据库中创建一个包含所有计算和所有连接的视图?

那么从那个视角开始SELECT就相当简单了。

+0

计算的列例如是开始日期的值与结束日期的相应值之间的差值。日期范围是查询的一部分以及列名称的列表,因此它可以是任何内容。有什么方法可以创建一个需要参数的视图吗?否则,我不认为意见可以在这里帮助。 – Jake

+0

这是我答案的一部分,如果你可以确定你需要什么样的计算,那么它们可以很容易地包含在视图中。日期范围听起来像是WHERE子句的一部分,所以这也可以工作。 –