2

我正在尝试加快查询速度。其中很多都非常复杂,目前我主要通过创建多个查询并通过连接链接它们来实现这一点。

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

任何一个选项都会影响速度,还是复杂只是复杂?

编辑:下面的示例查询

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 部分的内容创建为两个单独的查询,保存它们并使用内部连接。

4

2 回答 2

3

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

Select * from employees where name IN (select Manager_name from Team_project where project_id=1)

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

但是,这一切都取决于查看此讨论以获取更多详细信息: Subquery v/s inner join in sql server

于 2013-09-26T13:24:06.453 回答
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];
于 2013-09-27T00:24:29.210 回答