不同列数的 Openquery 性能

问题描述 投票:0回答:1

我有一个使用 openquery 的查询,并且花费的时间太长。 查询如下所示:

SELECT *
FROM OPENQUERY(LINKEDSERVER,
'SELECT column1, column2, column3, ..., column50
FROM someTable'
)

所以需要一个多小时。 但是,我注意到,如果我只选择一列,则只需一分钟:

SELECT *
FROM OPENQUERY(LINKEDSERVER,
'SELECT column1
FROM someTable'
)

很明显,这取决于我选择的列数。 问题是如何使 50 列的查询更快?

更新:

我仍然有问题,所以我想添加一些细节。

  1. 在我真正的查询中,我确实有 WHERE 过滤器,但我没有在问题中提及它,因为我确信这并不重要。
  2. 如果我直接在远程服务器上运行查询,查询的运行速度会更快。
  3. 它看起来不像是通道问题,因为当我尝试并行执行多个相同的查询时,它们与单个查询同时完成。
  4. 从我的角度来看,驱动程序或类似问题似乎存在问题。
sql-server query-optimization openquery
1个回答
1
投票

这与列数无关,而是与它们的累积大小有关。如果您的过滤器在两种情况下都相同,则您的查询中至少有一个非常大的列。

因此,您需要通过首先查看表的定义方式来确定哪一列是大列。尝试一次对一列运行查询,并对所有列执行此操作。这可以让你找出哪个专栏的写作速度最慢。

现在,如果您有这种非常大的列值,您将需要弄清楚是否需要该列。如果没有,那么您可以简单地将其从查询中删除,并且它应该以更快的速度执行。如果您需要减慢查询速度的列,那么您要么接受查询需要很长时间才能执行,要么将慢速列与查询分开。您可以在没有大列的情况下执行查询,然后单独执行查询的慢速部分,可能通过数据包运行。

因此,如果您想要一些快速的早期结果,那么您可以从查询中省略大列,并在稍后进行长时间运行的作业来获取这些值。因此,您的长文本和二进制大对象将稍后进入目标,但用户名和电子邮件很快就会出现。

© www.soinside.com 2019 - 2024. All rights reserved.