我有一个连接15个表甚至更多的查询。我需要优化响应时间。我创建了一些索引列,将一些条件从NOT IN更改为NOT EXISTS,但我发现自己对此感到疑惑。
这些连接的顺序是否会影响响应时间?
答案 0 :(得分:0)
JOIN
的顺序肯定会影响性能以及连接类型。由于联接的选择性,INNER JOIN
通常会产生比RIGHT
或LEFT OUTER JOIN
更快的结果。
SQL Server也会尽力优化每个查询,但在15个连接时,它可能会遇到困难。考虑将声明分解为较少连接的较小容器。我过去使用的一种解决此类问题的策略是创建一个临时表来存储结果,然后INSERT
创建它并UPDATE
相应地通过几个不同的语句,使用15表格分散到适当的插入/更新位置。
答案 1 :(得分:-1)
连接的顺序绝对重要。问题是,你可以通过重写SQL来改变顺序吗?查询优化器不一定关心您编写连接的顺序,具体取决于连接的类型。查询优化器会尽力根据您编写的SQL找到最有效的执行计划。然而,它并非接近完美。如果您在查看执行计划后发现它可以通过其他方式更有效地完成,您可以欺骗它按照自己的方式进行操作,看看它是否有帮助。
欺骗它的一种方法是在加入大表之前使用临时表来削减结果集。这将允许选择较少的记录,这将减少I / O.
另一种方式,如Adam Machanic所示,是使用select子句中的top和order by。