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