2

使用 SQL Server 2008 R2 哪个更好(更快、更少的中间表、更少的内存使用)和通常的做法?

SELECT staff.id, staff.name, details.address, salary.hourly_rate, 
manager.name, boss.name
FROM STAFF_TABLE staff
LEFT JOIN STAFF_DETAILS_TABLE details on staff.id = details.id
LEFT JOIN STAFF_SALARY_TABLE salary on staff.id = salary.id
LEFT JOIN STAFF_TABLE manager on staff.manager_id = manager.id
LEFT JOIN STAFF_TABLE boss on staff.boss_id = boss.id

或者

SELECT staff.id, staff.name, 
(SELECT address FROM STAFF_DETAILS_TABLE  id = staff.id) [address], 
(SELECT hourly_rate FROM STAFF_SALARY_TABLE WHERE id = staff.id) [hourly_rate], 
(SELECT name FROM STAFF_TABLE WHERE id = staff.manager_id) [manager_name], 
(SELECT name FROM STAFF_TABLE WHERE id = staff.boss_id) [boss_name]
FROM STAFF_TABLE staff

谢谢!

4

2 回答 2

4

如果您在所有表中的所有适当 id 上都有索引,则查询应该生成相同的执行计划。一个细微的区别是优化器可能会以不同的方式处理内联查询,因为它们必须只返回一行(否则会产生错误)。

我更喜欢from在可能的情况下将所有表引用保留在子句中。我发现它使维护查询变得更容易——所有的表引用都在一个地方。所以,我更喜欢显式的格式joins

于 2013-01-07T02:31:21.250 回答
2

获得答案的唯一真正方法是计时并检查各种查询的执行计划。我相信 SQL Server 会尝试优化查询,所以时间上的差异可能很小。带有 JOIN 的版本更具可读性,如果性能没有太大差异,我会更喜欢它。

于 2013-01-07T01:31:40.067 回答