Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用子查询在from子句中选择特定列是否有效?_Sql_Hive_Subquery - Fatal编程技术网

Sql 使用子查询在from子句中选择特定列是否有效?

Sql 使用子查询在from子句中选择特定列是否有效?,sql,hive,subquery,Sql,Hive,Subquery,假设表1有a,b,c,…z列 在from子句中使用子查询选择特定列是否比 只是选择全部(*) 还是会导致更多的计算? (我正在使用蜂箱) (A) 谢谢不管数据库如何,使用子查询选择特定列通常是个坏主意。但是,在大多数数据库中,这对性能没有影响 为什么这是个坏主意?基本上,它会混淆优化器和/或任何读取查询的人。根据数据库 这使得查询更难维护(添加新列可能需要在子查询中反复重复列名) 子查询可能会具体化(这不应该发生在配置单元中) 如果在外部查询中进行修剪,则修剪分区可能不起作用 它可能会阻止使用

假设表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)