为什么我的查询需要时间,即使主表是空的?

问题描述 投票:0回答:1

我的查询是这样的:

Select 
...
...
...
from
main_table m
inner join x on x.id=m.id
inner join y on y.id=m.id
left outer join z on z.id=m.id
left outer join t on t.id=m.id
where m.date_col=to_date('20200101','yyyymmdd');

查询需要1分钟。但结果是空的。

我怎样才能更快地完成它。

select 
...
...
...
from
  main_table m 
    where m.date_col=to_date('20200101','yyyymmdd');

此查询需要3秒钟。

提前致谢

sql oracle oracle11g query-performance
1个回答
0
投票

为了更好地理解“为什么”,可能需要一个解释计划输出来查看Oracle所做的访问模式和连接操作选择。仅仅因为您的结果集为空并不意味着每个连接表都是。我的猜测是,加入的某些表可能具有一定的大小,访问模式可能适合也可能不适合加入选择。例如,第二个表x可能非常大,Oracle正在全面扫描并使用散列连接。完成所有这些操作后,没有连接的行匹配,因此返回0行。也许列上应该有一个索引,也许不是。它又取决于行和块。如果不是x,则y可能在相同的情况下很大。底线是结果是空的,但我的猜测是x或y有一些行,只是不匹配导致查询需要一些时间的行。没有解释计划,真的很难说。一旦查看,可能会建议进行优化。

© www.soinside.com 2019 - 2024. All rights reserved.