为什么即使主表为空我的查询也要花费时间?

时间:2019-04-03 08:59:48

标签: sql oracle oracle11g query-performance

我的查询如下:

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秒钟。

预先感谢

1 个答案:

答案 0 :(得分:0)

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