【发布时间】:2020-12-01 21:46:46
【问题描述】:
我有这个 oracle 查询需要大约 1 分钟才能得到结果:
SELECT TRUNC(sysdate - data_ricezione) AS delay
FROM notifiche@fe_engine2fe_gateway n
WHERE NVL(n.data_ricezione, TO_DATE('01011900', 'ddmmyyyy')) =
(SELECT NVL(MAX(n2.data_ricezione), TO_DATE('01011900', 'ddmmyyyy'))
FROM notifiche@fe_engine2fe_gateway n2
WHERE n.id_sdi = n2.id_sdi)
--AND sysdate-data_ricezione > 15
基本上我有一个名为“notifiche”的表,其中每条记录代表对另一种对象(发票)的一种更新。我想知道过去 15 天内哪张发票没有收到任何更新。我可以通过加入 notifiche n2 表,获取每张发票的最新记录,并评估更新日期 (data_ricezione) 和当前日期 (sysdate) 之间的差异。
当我添加注释条件时,查询需要无限时间才能完成(我的意思是几个小时,从来没有看到它的结尾......)
这个简单的条件怎么可能让查询变得这么慢?
如何提高性能?
【问题讨论】:
-
样本数据和期望的结果会有所帮助。这个查询似乎不是特别有用。
-
该表有 640k 条记录,每张发票平均有 1,1 条记录(因此很难提供数据样本......我有什么可以帮助你的吗?)。期望的结果是了解为什么数据过滤器会使一切变得如此缓慢,以及性能改进(不知何故已经获得)
标签: sql oracle performance