嵌套查询:最佳做法

问题描述 投票:2回答:2

我正在尝试加快查询速度。 它们中的许多非常复杂,目前,我主要通过创建多个查询并通过联接将它们链接来实现此目的。

这是最佳实践,还是我应该在SELECT使用SELECT并尝试在一个查询中实现同一目的?

哪个选项会影响速度,还是很复杂?

编辑:下面的示例查询

SELECT HoldingCoNos.ID
FROM (
  SELECT [SearchByName - No Filter].ID
  FROM [SearchByName - No Filter]
  INNER JOIN [SearchByName - Level 1 Subsidiaries]
  ON [SearchByName - No Filter].ID = [SearchByName - Level 1 Subsidiaries].[Holding Company]
) AS HoldingCoNos
GROUP BY HoldingCoNos.ID;

这一切都在一个查询中-另一个选择是将查询的FROM部分的内容创建为两个单独的查询,保存它们并使用内部联接。

sql ms-access join ms-access-2010
2个回答
3
投票

一般而言:例如,子查询针对父查询中的每一行执行

从名称为IN的员工中选择*(从Team_project中选择Manager_name,其中project_id = 1)

它将对employees表中的每一行执行select manager_name,以比较授予查询被缓存的名称,这将使其更快,但仍然需要更多工作。

但是,所有这些都取决于更详细的讨论: sql server中的子查询v / s内部联接


2
投票

查看您的示例查询,我可以指出两点:

  • 您实际上不需要这里的子查询。 您正在从子查询中选择一个字段,然后按该字段分组。 相反,您可以摆脱外部查询,而只需select distinct [SearchByName - No Filter].ID
  • 知觉是现实的十分之九。 查询看起来很复杂,部分原因是您在各处都使用完整的表名,而不是短表别名。 请注意别名的区别(以及一些谨慎的格式)。 当您的查询变大时,它会被放大几倍:

SQL:

select distinct sbnnf.ID as HoldingCoID
from [SearchByName - No Filter] as sbnnf
inner join [SearchByName - Level 1 Subsidiaries] as sbnl1s
on sbnnf.ID = sbnl1s.[Holding Company];
© www.soinside.com 2019 - 2024. All rights reserved.