如何在SQL Server中并行查询多个不相关的表?

时间:2016-03-11 00:34:49

标签: sql sql-server tsql

我获得了一个表名列表,并希望从每个表中获取特定列的不同值。例如:

输入= TableA,TableD,TableX

输出=

Table Name   |    Value

TableA       |    1

TableA       |    2

TableD       |    1

TableX       |    3

由于这些表是不相关的,如果我可以并行查询它们以节省一些时间,那将会很棒。我认为在一个大的UNION语句中查询它们会让SQL Server引擎自动并行化查询,但我想避免这种情况。其中一些表很大,有可能由于内存/资源问题,查询它们可能会失败。因此,如果我执行了UNION,则一个表失败将导致整个查询失败。

我唯一的选择是在应用程序端处理此问题吗? (即对输入列表中的每个表并行调用相同的sproc)

感谢您的帮助,如果目标不明确,请告诉我。

1 个答案:

答案 0 :(得分:1)

评论太长了。

您是否担心SQL Server内存不足而应用程序不足?您似乎对数据库和资源的理解有限。或者,您有一个非常奇怪的环境,数据库服务器上的资源很少,而且应用程序端有很多资源。

从技术上讲,你似乎想要:

select distinct 'tableA' as tablename, value from tableA union all
select distinct 'tableB' as tablename, value from tableB union all
select distinct 'tableC' as tablename, value from tableC . . .;

不同的子查询不可能有冲突的行,因为表名区别于它们。因此,请勿使用union来承担重复删除的开销。

此版本的查询还可以利用索引。 。 。在tableA(value)上,依此类推。这可能非常方便。

据我所知,SQL Server并行运行union all个查询。这很不幸。因此,将每个查询独立发送到数据库的多线程应用程序可能具有更好的性能。但是,构建这样的应用程序可能很棘手,因为必须等待所有线程完成才能合并结果。