使用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
谢谢!
如果在所有表中的所有适当的id上都有索引,则查询应该生成相同的执行计划。一个细微的区别是,优化器可能会以不同的方式处理内联查询,因为它们必须只返回一行(否则会生成错误)。
我更喜欢在from
子句中保留所有表引用,如果可能的话。我发现这样更容易维护查询——所有的表引用都在一个地方。因此,我更喜欢带有显式joins
的格式。
要得到这个问题的答案,唯一真正的方法是计时并检查各种查询的执行计划。我相信SQL Server会尝试优化查询,所以在时间上可能会有很小的差异。带有JOIN的版本可读性更强,如果在性能上没有太大的差异,我更喜欢这个版本。