具有可配置变量的SQL查询设计

时间:2014-11-24 16:44:25

标签: sql sql-server performance

我有一个Web应用程序,它有大量的表和变量,用户可以在运行时选择(或不选择)。像这样:

在DB中:

Table A
Table B
Table C

在运行时,用户可以选择要返回的任意数量的变量。像这样:

Result Display = A.field1, A.Field3, B.field19

在15个表中共有多达100多个字段,可以在单个结果集中返回。

我们有一个查询当前的工作原理是创建一个临时表来选择和聚合所需的字段,然后从该表中选择所需的变量。但是,此查询需要相当长的时间才能执行(30秒)。我想尝试找到一种更有效的方法来返回所需的结果,同时仍然允许用户配置变量来查看。我知道这可以完成,因为我已经看到它在其他领域完成。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

不是使用临时表,而是每次运行查询时使用视图并重新编译视图(或者只使用子查询或CTE而不是视图)。 SQL Server可能能够根据所选字段优化视图。

使用临时表的最佳理由是不需要进行日内更新。然后你可以在晚上创建“临时”表,只需从该表中选择。

查询优化方法(无论是通过视图,CTE还是子查询)可能还不够。这是一个很难解决的问题。但是,通常情况下,可能存在来自特定子查询的变量主题。如果是这样,您可以编写一个存储过程来生成动态SQL,该动态SQL只具有为给定运行选择的变量的必需连接。然后使用该SQL从数据库中获取。

最后,也许还有其他方法可以优化查询,无论选择哪个字段。如果您认为可能是这种情况,那么简化人类消费的查询并提出另一个问题