我正在尝试加快查询速度。 它们中的许多非常复杂,目前,我主要通过创建多个查询并通过联接将它们链接来实现此目的。
这是最佳实践,还是我应该在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部分的内容创建为两个单独的查询,保存它们并使用内部联接。
一般而言:例如,子查询针对父查询中的每一行执行
从名称为IN的员工中选择*(从Team_project中选择Manager_name,其中project_id = 1)
它将对employees表中的每一行执行select manager_name,以比较授予查询被缓存的名称,这将使其更快,但仍然需要更多工作。
但是,所有这些都取决于更详细的讨论: sql server中的子查询v / s内部联接
查看您的示例查询,我可以指出两点:
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];