相关疑难解决方法(0)

谓词:在 WHERE 子句还是 JOIN 子句中?

查看Kalen Delaney 撰写的“SQL Server 2008 Internals” 1,第 13 页,它说明了以下内容:

“生成这样一个计划的第一步是规范化每个查询,这可能会将单个查询分解为多个细粒度的查询。查询优化器在规范化一个查询之后对其进行优化,这意味着它确定了一个计划执行该查询。”

另一位 DBA 向我建议,可以通过将WHERE子句谓词移动到FROM子句中来提高某些查询的性能,例如:

SELECT *
FROM dbo.table1 t1
    INNER JOIN dbo.table3 t3 ON t1.ID = t3.ID
    LEFT OUTER JOIN dbo.table2 t2 ON t1.ID = t2.ID
WHERE t1.CreateDate >= '2015-07-31 00:00:00';
Run Code Online (Sandbox Code Playgroud)

会成为:

SELECT *
FROM dbo.table1 t1
    INNER JOIN dbo.table3 t3 ON t1.ID = t3.ID
        AND t1.CreateDate >= '2015-07-31 00:00:00'
    LEFT OUTER JOIN dbo.table2 t2 ON t1.ID = t2.ID;
Run Code Online (Sandbox Code Playgroud)

显然,第一个示例的含义是查询优化器将执行第JOIN一个, …

sql-server optimization

16
推荐指数
1
解决办法
5930
查看次数

连接是否在运行时优化为 where 子句?

当我写这样的查询时......

select *
from table1 t1
join table2 t2
on t1.id = t2.id
Run Code Online (Sandbox Code Playgroud)

SQL 优化器,不确定这是否是正确的术语,是否将其转换为...

select *
from table1 t1, table2 t2
where t1.id = t2.id
Run Code Online (Sandbox Code Playgroud)

本质上,SQL Server 中的 Join 语句只是一种更简单的编写 sql 的方法吗?或者它实际上是在运行时使用的?

编辑:我几乎总是,而且几乎总是,使用 Join 语法。我只是好奇会发生什么。

join sql-server optimization t-sql

15
推荐指数
2
解决办法
1928
查看次数

在 FROM 和 WHERE 子句中连接表

第一次来这里。

我对加入表格时的最佳实践有疑问。例如,以下两个查询都返回相同的结果:

SELECT i.id, p.first_name, p.last_name
FROM individuals i, profiles p
WHERE i.id = p.individual_id;


SELECT i.id, p.first_name, p.last_name
FROM individuals i INNER JOIN profiles p ON i.id = p.individual_id;
Run Code Online (Sandbox Code Playgroud)

这两种方法的优缺点是什么?请让我知道你的想法。我对性能差异感兴趣,但也对查询的可读性、从一个 RDMS 到另一个 RDMS 的可移植性感兴趣,等等。

谢谢!

join

2
推荐指数
1
解决办法
2340
查看次数

标签 统计

join ×2

optimization ×2

sql-server ×2

t-sql ×1