为什么subselect会使SQL请求变慢?
我有以下代码:为什么subselect会使SQL请求变慢?,sql,join,subquery,sql-optimization,exasolution,Sql,Join,Subquery,Sql Optimization,Exasolution,我有以下代码: select * from table_1 join table_2 on table_1.col1 = table_2.col1 where table_2.col2 = 1 此查询有效,并提供我期望的结果。现在我想优化这个查询。我的想法是,在连接两个表之前,尽量减少第二个查询。换句话说,我认为“删除”行并连接较小的表应该比连接大表然后从中选择所需的更快。我通过以下方式实现我的想法: select * from tabl
select
*
from
table_1
join
table_2
on
table_1.col1 = table_2.col1
where
table_2.col2 = 1
此查询有效,并提供我期望的结果。现在我想优化这个查询。我的想法是,在连接两个表之前,尽量减少第二个查询。换句话说,我认为“删除”行并连接较小的表应该比连接大表然后从中选择所需的更快。我通过以下方式实现我的想法:
select
*
from
table_1
join
(
select
*
from
table_2
where
table_2.col2 = 1
)
on
table_1.col1 = table_2.col1
令人惊讶的是,第二个查询比第一个查询慢得多。我做错了什么?您可以看到查询执行计划中的差异 没有计划,我只能假设: 在第一个示例中,您有两个表。Mysql优化器具有一定的数据统计功能,能够正确选择和使用索引 在第二个查询中,并没有表,只有查询结果和优化器并没有数据统计。可能在您的情况下,优化器执行查询时没有索引或类似的内容
我认为,在您的情况下,子查询是一种糟糕的做法。您有一个简单的查询,必须使用第一个示例。在Exasol中,我认为这是一个非常糟糕的优化器。合理的数据库通常会为这些查询生成相同的执行计划。(也许它是基于MySQL构建的,而MySQL在大多数版本中都有相同的缺陷。)