SQL日期转换为查询添加了大量时间 - Oracle

时间:2018-03-29 09:41:00

标签: sql oracle date

我开发了一大段编码,以便从我们的数据库中获取订单信息。这在以前一直运行良好,在不到一秒的时间内捕获了1000行数据。

然而,最近规范已经改变。我们已经从周一到周一搬到了从周六到​​周五运行订单的意图。

这意味着重写代码,包括case语句,下面是一个例子:

*(Previous)*
,Case When To_Char(obd.due_date, 'YYYYIW') = To_Char(sysdate, 'YYYYIW') Then 'Current Week'

*(Now)*
,Case When TO_DATE(obd.due_date, 'DD-MM-YYYY') BETWEEN (TO_DATE(TO_CHAR(TRUNC(TO_DATE(SYSDATE,'DD-MM-YYYY'), 'WW')-2,'DD-MON-YYYY'))) AND (TO_DATE(TO_CHAR(TRUNC(TO_DATE(SYSDATE,'DD-MM-YYYY'), 'WW')+5,'DD-MON-YYYY'))) Then 'Current Week'

但是,由于转换,我现在丢失了字段索引,因此访问数据的时间大大增加。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我怀疑你的“之前”计算是否使用了一个索引(它在CASE中使用,而不是在WHERE中使用)。

您应该始终尝试获取可搜索的参数,即仅在比较的一侧进行计算:

WHEN obd.due_date >= next_day(trunc(current_date) , 'sat')-7
 AND obd.due_date < next_day(trunc(current_date) , 'sat')

应该是你想要的