假设我有这样的查询,我加入了许多虚拟表:
SELECT table1.a, tbl2.a, tbl3.b, tbl4.c, tbl5.a, tbl6.a
FROM table1
JOIN (SELECT x, a, b, c FROM table2 WHERE foo='bar') tbl2 ON table1.x = tbl2.x
JOIN (SELECT x, a, b, c FROM table3 WHERE foo='bar') tbl3 ON table1.x = tbl3.x
JOIN (SELECT x, a, b, c FROM table4 WHERE foo='bar') tbl4 ON table1.x = tbl2.x
JOIN (SELECT x, a, b, c FROM table5 WHERE foo='bar') tbl5 ON table1.x = tbl5.x
JOIN (SELECT x, a, b, c FROM table6 WHERE foo='bar') tbl6 ON table1.x = tbl6.x
WHERE anotherconstraint='value'
Run Code Online (Sandbox Code Playgroud)
在我的真实查询中,每个JOIN都有自己的JOIN,聚合函数和WHERE约束.
像这样的查询运行得有多好/多差?此外,这个和将所有单个虚拟表作为自己的查询运行并将结果链接到SQL之外的影响区别是什么?
使用内联视图(AFAIK是您称之为"虚拟表"的正确术语)本质上并不是什么坏事.我建议学习查看和理解执行计划,以便您可以调查特定的性能问题.
一般来说,我认为执行多个单表查询然后基本上将结果连接到前端代码中是一个非常糟糕的主意.做连接是RDBMS的设计目的,为什么重写它?
| 归档时间: |
|
| 查看次数: |
4491 次 |
| 最近记录: |