sql - Oracle 查询:日期过滤器变得非常慢
问题描述
我有这个 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) 之间的差异。
当我添加注释条件时,查询需要无限时间才能完成(我的意思是几个小时,从来没有看到它的结尾......)
这个简单的条件怎么可能使查询如此缓慢?
我怎样才能提高性能?
解决方案
尽量保持data_ricezione
独处;如果上面有索引,它可能会有所帮助。
所以:从
and sysdate - data_ricezione > 15
至
and -data_ricezione > 15 - sysdate / * (-1)
至
and data_ricezione < sysdate - 15
由于一切都通过数据库链接完成,请查看driving_site
提示是否有任何好处,即
select /*+ driving_site (n) */ --> "n" is table's alias
trunc(sysdate-data_ricezione) as delay
from
notifiche@fe_engine2fe_gateway n
...
推荐阅读
- swift - 如何从 Firebase 存储中检索配置文件图像
- python - Spyder 4:自动完成从错误的自定义模块中建议功能
- r - plotCountDepth R 函数中的问题。如何解决?
- java - 在将 openjdk 11u 交叉编译为 aarch64 时出错
- android - 将模型映射到嵌套的 Maybe 中的实体
- c++ - C++ 中来自 abort(3) (SIGABRT) 的中止信号
- checkbox - 如何更改蚂蚁设计中的单选按钮颜色?
- python - 在列内的值中搜索特定字符后,如何在 python 中仅打印 datframe 中的某些列
- lua - 尝试使用 Discordia 和 Lua 创建一个不和谐的机器人,但 kick 命令不断使其崩溃
- mysql - 来自 MySQL external_query 的 BigQuery 内部错误聚合了一个返回日期时间的案例表达式