Sql 使用子查询在from子句中选择特定列是否有效?
假设表1有a,b,c,…z列 在from子句中使用子查询选择特定列是否比 只是选择全部(*) 还是会导致更多的计算? (我正在使用蜂箱) (A)Sql 使用子查询在from子句中选择特定列是否有效?,sql,hive,subquery,Sql,Hive,Subquery,假设表1有a,b,c,…z列 在from子句中使用子查询选择特定列是否比 只是选择全部(*) 还是会导致更多的计算? (我正在使用蜂箱) (A) 谢谢不管数据库如何,使用子查询选择特定列通常是个坏主意。但是,在大多数数据库中,这对性能没有影响 为什么这是个坏主意?基本上,它会混淆优化器和/或任何读取查询的人。根据数据库 这使得查询更难维护(添加新列可能需要在子查询中反复重复列名) 子查询可能会具体化(这不应该发生在配置单元中) 如果在外部查询中进行修剪,则修剪分区可能不起作用 它可能会阻止使用
谢谢不管数据库如何,使用子查询选择特定列通常是个坏主意。但是,在大多数数据库中,这对性能没有影响 为什么这是个坏主意?基本上,它会混淆优化器和/或任何读取查询的人。根据数据库
- 这使得查询更难维护(添加新列可能需要在子查询中反复重复列名)
- 子查询可能会具体化(这不应该发生在配置单元中)
- 如果在外部查询中进行修剪,则修剪分区可能不起作用
- 它可能会阻止使用索引(不适用于配置单元)
- 它可能会混淆优化器和统计信息(可能不适用于配置单元)
我想不出一个好的理由来通过引入不必要的子查询来使查询复杂化。您好,您可以通过逐个执行来检查两个查询的性能(所花费的时间)。没有区别。优化器将关注最佳查询计划。顺便说一句,子查询应该有一个别名。使用EXPLAIN命令并比较查询计划
select
table1.a,
table1.b,
table2.aa,
table2.bb
FROM (SELECT table1.a
,table1.b
FROM table1
)
join table2 on (table1.b = table2.b)
B)
select
table1.a,
table1.b,
table2.aa,
table2.bb
FROM table1
join table2 on (table1.b = table2.b)