Sql 连接到选择与连接到表集
对于那里的DB专家,我想知道在连接到SELECT语句的结果和连接到以前填充的表变量之间是否存在功能/性能差异。我在SQLServer2008R2中工作 示例(TSQL):Sql 连接到选择与连接到表集,sql,sql-server,performance,tsql,database-performance,Sql,Sql Server,Performance,Tsql,Database Performance,对于那里的DB专家,我想知道在连接到SELECT语句的结果和连接到以前填充的表变量之间是否存在功能/性能差异。我在SQLServer2008R2中工作 示例(TSQL): 在“真实”世界中,表和表变量是预定义的。我所关注的是能够将匹配的引用行用于进一步的操作,但我担心额外的步骤会降低查询速度。有没有技术上的原因来解释为什么一个会比另一个更快?这两种方法之间的性能差异是什么?我意识到很难(如果不是不可能的话)给出一个明确的答案,只是为这种情况寻求一些建议。这会给出同样的结果吗 SELECT t.*
在“真实”世界中,表和表变量是预定义的。我所关注的是能够将匹配的引用行用于进一步的操作,但我担心额外的步骤会降低查询速度。有没有技术上的原因来解释为什么一个会比另一个更快?这两种方法之间的性能差异是什么?我意识到很难(如果不是不可能的话)给出一个明确的答案,只是为这种情况寻求一些建议。这会给出同样的结果吗
SELECT t.*, s.*
FROM dbo.TestTable AS t
JOIN dbo.TestRefTable AS s ON t.id = s.id AND s.id = 1123
基本上,这是来自
TestTable
和TestRefTable
的所有记录的交叉连接,其中id=1123
这会得到相同的结果吗
SELECT t.*, s.*
FROM dbo.TestTable AS t
JOIN dbo.TestRefTable AS s ON t.id = s.id AND s.id = 1123
基本上,这是来自
TestTable
和TestRefTable
且id=1123
的所有记录的交叉联接,我希望直接表联接比表到表变量快,并且使用更少的资源。我希望直接表联接比表到表变量快,并且使用更少的资源。一般来说,查询中的派生表可能比连接到表变量快,因为它可以使用索引,而它们在表变量中不可用。但是,临时表也可以添加索引,这可能会解决潜在的性能差异
此外,如果表变量记录的数量预计很小,那么索引无论如何也不会产生很大的差异,因此差异很小或没有差异
通常,您需要在自己的系统上进行测试,因为记录数、表设计和索引设计与最佳工作方式有很大关系。一般来说,查询中的派生表可能比加入表变量更快,因为它可以使用索引,而它们在表变量中不可用。但是,临时表也可以添加索引,这可能会解决潜在的性能差异 此外,如果表变量记录的数量预计很小,那么索引无论如何也不会产生很大的差异,因此差异很小或没有差异
通常,您需要在自己的系统上进行测试,因为记录的数量、表设计和索引设计与最有效的方法有很大关系。数据库引擎有一个优化器来找出执行查询的最佳方法。引擎盖下的东西比你想象的还要多。例如,当SQL Server进行连接时,它至少可以选择四种连接算法:
- 嵌套循环
- 索引查找
- 合并联接
- 散列联接
换句话说,将查询保留为一条语句。如果您需要改进它,那么在它工作之后,将重点放在优化上。通常,您不必花费太多时间进行优化,因为该引擎非常擅长于此。数据库引擎有一个优化器来找出执行查询的最佳方式。引擎盖下的东西比你想象的还要多。例如,当SQL Server进行连接时,它至少可以选择四种连接算法:
- 嵌套循环
- 索引查找
- 合并联接
- 散列联接