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