使用内联查询或连接从另一个表获取数据



使用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的版本可读性更强,如果在性能上没有太大的差异,我更喜欢这个版本。

相关内容

  • 没有找到相关文章

最新更新