Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 嵌套查询:最佳实践_Sql_Ms Access_Join_Ms Access 2010 - Fatal编程技术网

Sql 嵌套查询:最佳实践

Sql 嵌套查询:最佳实践,sql,ms-access,join,ms-access-2010,Sql,Ms Access,Join,Ms Access 2010,我正在努力加快我的查询速度。很多查询都非常复杂,目前我主要是通过创建多个查询并通过连接链接它们来实现这一点 这是最佳实践,还是我应该在SELECTs中使用SELECTs并尝试在一个查询中实现相同的功能 这两个选项中的任何一个都会对速度产生影响,还是很复杂 编辑:下面的查询示例 这是一个查询中的全部内容-另一个选项是将查询的FROM部分的内容创建为两个单独的查询,保存它们并使用内部联接。一般来说: 例如,子查询会针对父查询中的每一行执行 从员工中选择*,在员工中选择经理,从团队项目中选择经理,在团

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

这是最佳实践,还是我应该在SELECTs中使用SELECTs并尝试在一个查询中实现相同的功能

这两个选项中的任何一个都会对速度产生影响,还是很复杂

编辑:下面的查询示例

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

一般来说: 例如,子查询会针对父查询中的每一行执行

从员工中选择*,在员工中选择经理,从团队项目中选择经理,在团队项目中选择项目id=1

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

但是,这一切都取决于我们的讨论,了解更多细节:

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

这里不需要子查询。您正在从子查询中选择单个字段并按该字段分组。相反,您可以摆脱外部查询,只需选择distinct[SearchByName-No Filter].ID。 感知是现实的十分之九。查询看起来很复杂,部分原因是到处都使用完整的表名,而不是短表别名。注意别名和稍微小心的格式的区别。当您的查询变大时,这将放大几倍: SQL:


你能举个例子吗?最佳实践是一个意见问题。虽然它们通常代表着明智的建议,但我发现,有时,最糟糕的做法更适合当前的情况。关于您关于哪种方法性能更好的问题,当您测试每种方法时发生了什么?请注意,您是针对一个不提供分析或分析机制的数据库提出这个问题的,这意味着任何答案都有点像在黑暗中拍摄。我经常使用MS Access,尽管我确实使用SQL Server,而且我基本上从不使用链接查询对象或子查询。我怀疑我的应用程序与您的应用程序有不同的,可能更简单的要求。多个查询和通过连接链接它们与选择中的选择,有什么区别?通常情况下,一个查询中只有一个SELECT语句。@DanBracuk它变化很大,很难说,但这是一个非常明智的建议。
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;
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];